Outils personnels
Vous êtes ici : Accueil GNU / Linux Debian Installer et configurer MySQL sur Debian
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Installer et configurer MySQL sur Debian

Par Pierre-Yves Landuré - Dernière modification 16/12/2010 14:06

Bien qu'il décrive une procédure relativement commune, ce manuel vous permettra d'installer rapidement un Mysql disposant d'une sécurité minimum sur Debian 4.0 Etch ou 5.0 Lenny.

Cet article a été testé sur les distributions suivantes :

  • Debian 4.0 Etch
  • Debian 5.0 Lenny
  • Debian 6.0 Squeeze

Cet article nécessite que vous soyez identifié en tant que super utilisateur root. Cela peut se faire par la commande :

su -

Installation

En premier lieu, il vous faut installer le serveur MySQL et un logiciel capable de créer des mots de passes :

DEBIAN_FRONTEND='noninteractive' command apt-get install mysql-server apg

Nous générons le mot de passe root de MySQL :

MYSQL_PASSWORD="$(command apg -q -a  0 -n 1 -M NCL)"

Nous affichons le nouveau mot de passe :

command echo "Votre mot de passe pour l'utilisateur root de MySQL sera : '${MYSQL_PASSWORD}'."

Attention: Notez la valeur affichée et conservez la précieusement !

Nous mettons en place le nouveau mot de passe :

command echo "SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('${MYSQL_PASSWORD}')" | command mysql --user=root
command echo "SET PASSWORD FOR 'root'@'${HOSTNAME}' = PASSWORD('${MYSQL_PASSWORD}')" | command mysql --user=root
command mysqladmin -u root password "${MYSQL_PASSWORD}"

Votre serveur MySQL est maintenant prêt à être utilisé.

Outil d'administration simplifiée

Afin d'accélérer le processus de création de base de données, j'ai écris un petit script pour faciliter ce processus.

Installez le script mysql-tools :

command wget http://howto.landure.fr/gnu-linux/debian-4-0-etch-en/mysql-sur-debian-4-0-etch/mysql-tools \
    --output-document="/usr/bin/mysql-tools"
command chmod +x "/usr/bin/mysql-tools"

Vous pouvez maintenant créer une base de donnée à l'aide de la commande :

# mysql-tools create-db MA_BASE

Si vous souhaitez créer une base de données propre à un domaine :

# mysql-tools create-domain-db www.domaine.com

Dans l'exemple ci-dessus, la base de donnée créée sera WWW_DOMAINE_COM.

Vous pouvez aussi créer l'utilisateur de la base de données pour d'autres clients que la machine locale (localhost) :

# mysql-tools create-db MA_BASE "host1 host2"

Pour créer un utilisateur sans aucun privilèges (pour Nagios par exemple), utilisez la commande :

# mysql-tools create-user mon_utilisateur

Pour supprimer toutes les tables d'une base de données, utilisez la commande :

# mysql-tools clear-db MA_BASE mon_utilisateur mon_mot_de_passe

Remarque : Cet outil est encore en cours d'élaboration, ses fonctionnalités seront améliorées petit à petit.

Rendre MySQL accessible pour le réseau local

ATTENTION: Ce qui suit entraîne des problèmes de sécurité. Si vous ne savez pas ce que vous faites, ne l'appliquez pas !

Si vous souhaitez que votre serveur MySQL soit accessible depuis d'autre ordinateurs que le serveur, modifiez l'adresse IP d'écoute du serveur MySQL et redémarrez-le :

command sed -i -e 's/^bind-address.*/#\0/' "/etc/mysql/my.cnf"
/etc/init.d/mysql restart

Sauvegardes

Il est important de sauvegarder régulièrement vos bases de données, afin de pouvoir récupérer vos données en cas de crash de votre serveur. Je vous propose de gérer cela grâce à l'outil Backup Manager. En premier lieu, veuillez suivre mon guide d'installation de Backup Manager:

Installer et configurer Backup Manager sur Debian 4.0 Etch

Configurez Backup Manager pour sauvegarder nos bases de données MySQL. Pour ce faire, créez un utilisateur "backup" qui aura les droits nécessaires pour utiliser la commande mysqldump:

MYSQL_BACKUPPWD=$(command apg -q -a  0 -n 1 -M NCL)
echo "GRANT SELECT, LOCK TABLES ON *.*
        TO backup@localhost
        IDENTIFIED BY '$MYSQL_BACKUPPWD';" \
    | command mysql --user=root --password

Configurez Backup Manager pour utiliser cet identifiant:

command sed -i -e "s|[#]*\(.*BM_MYSQL_ADMINLOGIN=\).*$|\1\"backup\"|" \
            -e "s|[#]*\(.*BM_MYSQL_ADMINPASS=\).*$|\1\"${MYSQL_BACKUPPWD}\"|" \
         "/etc/backup-manager.conf"

Activez la sauvegarde des bases de données MySQL:

command sed -i -e 's/[#]*\(.*BM_ARCHIVE_METHOD=.*".*\)"$/\1 mysql"/' \
         "/etc/backup-manager.conf"

PHPMyAdmin

PHPMyAdmin est une interface Web pour l'administration simplifiée de bases de données MySQL. Pour l'installez, vous devez disposer d'un serveur Web avec support du PHP, cela peut être Apache ou LigHTTPd. Vous pouvez installer LigHTTPd en suivant mon guide Installer Lighttpd et PHP 5 sur Debian.

Une fois que vous disposez d'un serveur HTTP avec support du PHP, installez PHPMyAdmin :

command apt-get install phpmyadmin php5-mcrypt php5-gd

Une fois installé, vous pouvez y accédez en cliquant sur ce lien : http://localhost/phpmyadmin/

Remarque : les commandes suivantes sont sûre car elle ne sont exécutées que si vous n'avez pas utilisé la configuration automatique de PHPMyAdmin.

Obtenez le script de création de la base de données utilisée par PHPMyAdmin pour gérer différentes informations:

SCRIPT="/usr/share/doc/phpmyadmin/scripts/create_tables_mysql_4_1_2+.sql.gz"
if [ -e "/usr/share/doc/phpmyadmin/examples/create_tables_mysql_4_1_2+.sql.gz" ]; then
  SCRIPT="/usr/share/doc/phpmyadmin/examples/create_tables_mysql_4_1_2+.sql.gz"
fi
if [ -e "/usr/share/doc/phpmyadmin/examples/create_tables.sql.gz" ]; then
  SCRIPT="/usr/share/doc/phpmyadmin/examples/create_tables.sql.gz"
fi
SQL_COMMAND=$(command gunzip --to-stdout "${SCRIPT}")

Créez l'utilisateur destiné à utiliser cette table:

if [ ! -e "/etc/dbconfig-common/phpmyadmin.conf" ]; then
  MYSQL_PASSWD="$(command apg -q -a  0 -n 1 -M NCL)"
  echo "${SQL_COMMAND};
GRANT USAGE ON mysql.* TO 'pma'@'localhost' IDENTIFIED BY '${MYSQL_PASSWD}';;
GRANT SELECT (
    Host, User, Select_priv, Insert_priv, Update_priv, Delete_priv,
    Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv,
    File_priv, Grant_priv, References_priv, Index_priv, Alter_priv,
    Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv,
    Execute_priv, Repl_slave_priv, Repl_client_priv
    ) ON mysql.user TO 'pma'@'localhost';
GRANT SELECT ON mysql.db TO 'pma'@'localhost';
GRANT SELECT ON mysql.host TO 'pma'@'localhost';
GRANT SELECT (Host, Db, User, Table_name, Table_priv, Column_priv)
    ON mysql.tables_priv TO 'pma'@'localhost';" \
    | command mysql --user=root --password
fi

Configurez PHPMyAdmin pour utiliser cette base de données:

if [ ! -e "/etc/dbconfig-common/phpmyadmin.conf" ]; then
  command sed -i -e "s|[/]*\(.*pmadb.*=\)[^;]*\(;.*\)$|\1 'phpmyadmin'\2|" \
            -e "s|[/]*\(.*controluser.*=\)[^;]*\(;.*\)$|\1 'pma'\2|" \
            -e "s|[/]*\(.*controlpass.*=\)[^;]*\(;.*\)$|\1 '$MYSQL_PASSWD'\2|" \
            -e "s|[/]*\(.*auth_type.*=\)[^;]*\(;.*\)$|\1 'cookie'\2|" \
            -e "s|[/]*\(.*pma_.*;.*\)$|\1|" \
        "/etc/phpmyadmin/config.inc.php"
fi

Remarque: Dans certains cas, il est nécessaire de "forcer" l'URL d'accès à PHPMyAdmin, cela peut se faire en ajouter la ligne de configuration suivante à la fin du fichier /etc/phpmyadmin/config.inc.php, et en remplacant l'URL en gras par votre URL de phpmyadmin:

$cfg['PmaAbsoluteUri'] = 'http://www.mon-domaine.com/un-chemin/phpmyadmin/';

Création d'une base de données

Remarque : utilisez de préférence l'outil mysql-tools.

Nous allons maintenant créer une base de données avec un utilisateur capable de l'administrer.

En premier lieu, configurez le nom de votre base de données :

MYSQL_DB="MA_BASE"

Remarque : Si vous le souhaitez, vous pouvez générer le nom de la base de données à partir du nom de domaine. Commencez par renseignez votre nom de domaine :

DOMAIN="www.domaine.com"

Générez le nom de votre base à l'aide de cette commande :

MYSQL_DB=$(echo "${DOMAIN}" | command tr '[a-z].-' '[A-Z]__')

A partir du nom de base, générez un nom d'utilisateur et son mot de passe :

MYSQL_USER=$(command echo "${MYSQL_DB}" \
    | command tr '[A-Z]' '[a-z]' \
    | command cut --characters=-16)
MYSQL_PASSWORD=$(command apg -q -a  0 -n 1 -M NCL)

Renseignez les hôtes depuis lesquels l'utilisateur sera autorisé à accéder à la base de données. Vous pouvez les ajouter après 'localhost', en les séparant par des espaces. Si vous ne savez pas de quoi il s'agit, ne modifiez pas cette ligne :

ALLOWED_HOSTS="localhost"

Générez le code SQL de création de la base de données et de son utilisateur :

SQL_QUERY="CREATE DATABASE IF NOT EXISTS \`${MYSQL_DB}\` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_unicode_ci;"
for ALLOWED_HOST in ${ALLOWED_HOSTS}; do
SQL_QUERY="${SQL_QUERY}
GRANT ALL PRIVILEGES ON \`${MYSQL_DB}\`.*
        TO \`${MYSQL_USER}\`@\`${ALLOWED_HOST}\`
        IDENTIFIED BY '${MYSQL_PASSWORD}';"
done

Exécutez le code SQL obtenu :

command echo "${SQL_QUERY}" | command mysql --user=root --password

Remarque: Le mot de passe demandé est celui de l'utilisateur root de MySQL.

Votre base de données et son utilisateur sont maintenant créés. Affichez l'identifiant et le mot de passe de l'utilisateur créé, et notez les précieusement. Par la suite, vous pourrez les utiliser pour accéder à la base de données :

command echo "# Les paramètres d'accès à votre base de données sont :
# Nom de la base de données
MYSQL_DB='${MYSQL_DB}'
# Identifiant
MYSQL_USER='${MYSQL_USER}'
# Mot de passe
MYSQL_PASSWORD='${MYSQL_PASSWORD}'"

Pour aller plus loin

Mettre en place l'utilisateur de maintenance 'debian-sys-maint'

Si vous avez récupéré un dump SQL d'une autre distribution, il est fort probable que l'utilisateur debian-sys-maint n'existe pas. Voici quelques lignes de commandes pour le créer :

SYSMAINT_PWD=$(/bin/grep --max-count=1 "password" /etc/mysql/debian.cnf | /bin/sed -e 's/^password[ =]*//g')
echo "ALTER TABLE user CHANGE password Password varchar(41) collate utf8_bin NOT NULL default '';
REPLACE INTO user SET
  host='localhost', user='debian-sys-maint', password=password('${SYSMAINT_PWD}'),
  Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y',
  Create_priv='Y', Drop_priv='Y', Reload_priv='Y', Shutdown_priv='Y',
  Process_priv='Y',  File_priv='Y', Grant_priv='Y', References_priv='Y',
  Index_priv='Y', Alter_priv='Y', Show_db_priv='Y', Super_priv='Y',
  Create_tmp_table_priv='Y', Lock_tables_priv='Y', Execute_priv='Y',
  Repl_slave_priv='Y', Repl_client_priv='Y';" \
  | /usr/bin/mysql --user=root --password mysql

Mettre en place un moteur de recherche

Si vous souhaitez créer un moteur de recherche pour votre application, vous pouvez vous tourner vers le moteur d'indexation open-source Sphinx.

Source : Merci à Guillaume Pousséo.

Déboguer les erreurs #1025 pour  les tables InnoDB

Si vous rencontrez une erreur #1025  lors de l 'altération d 'une table utilisant  le  moteur InnoDB, vous pouvez obtenir plus d'informations sur la nature de l 'erreur avec l'instruction  SQL:

SHOW ENGINE INNODB STATUS;

Source : Merci à snoyes sur irc.freenode.net#mysql

Corriger les erreurs "Incorrect key file for table"

Si vous rencontrez une erreur telle que celle-ci lors de l'exécution d'une requête SQL :

Could not execute query [Native Error: Incorrect key file for table '/tmp/#sql_2258_0.MYI'; try to repair it

C'est qu'il n'y a plus d'espace disque disponible pour votre dossier /tmp. Un seul remède à ce problème : Faites le ménage !

Remerciements

Attachements

phpMyAdmin introuvable sur Debian Lenny

Posté par Geog le 22/08/2009 23:09
Salut,

J'ai suivi ton tuto à la lettre pour l'installation de Lighttpd/MySQL & phpMyAdmin sous une Lenny.
Le souci ici c'est que je n'ai aucune trace de phpmyadmin dans /var/www, j'ai set la variable "$cfg['PmaAbsoluteUri']" + reboot mais toujours rien, sous Etch ça fonctionnait pourtant très bien.

D'avance merci pour votre aide =)

Lenny et PHPMyAdmin

Posté par Lone Wolf le 23/08/2009 08:30
Sous Lenny, la mise en place de PHPMyAdmin n'est pas faite via la mise en place d'un lien symbolique dans /var/www mais par une altération de la configuration du serveur.

Normallement, si vous avez choisi correctement le serveur à configurer lors de l'installation de PHPMyAdmin, vous devrier pouvoir y accéder via l'URL http://localhost/phpmyadmin/

Sinon, un petit grep -r phpmyadmin dans le dossier de configuration du serveur http vous permettra de retrouver la configuration spécifique à phpmyadmin.

Bon courrage

Lenny et PHPMyAdmin

Posté par Geog le 23/08/2009 12:37
Merci pour cette réponse rapide.

Le grep n'a rien donné dans mon cas, j'ai donc c/c le contenu de "/etc/phpmyadmin/lighttpd.conf" dans le fichier de configuration de lighttpd. Après avoir relancé le serveur web ça fonctionne, étrange que ce ne soit pas le cas à l'installation.

Merci pour ton travail !

merci

Posté par fr le 25/08/2009 19:27
Merci pour ce tutoriel bien fait, complet.
Ca marche impec! (j'ai fait installation et création de base)
Site ajouté à mes bookmarks.

A+

François

debian testing

Posté par wireless46 le 09/10/2009 13:32
installation et création de base super tuto et très bon site sous spip

domaine usvn

Posté par BlackTester le 16/12/2009 21:23
Très bon tuto, cependant, je ne parviens pas à obtenir l'interface usvn.domaine.com ...

ERROR 1045 (28000)

Posté par Seb_12 le 02/06/2010 21:06
Bonjour,
Merci pour ces très bon tuto très accessible. Par contre je bloque depuis quelque temps sur une erreurs lors de la saisie de la ligne "echo "SET PASSWORD FOR 'root'@'${HOSTNAME}' = PASSWORD('${MYSQL_PWD}')" | mysql --user=root". J'ai toujours la même erreur: "ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)"
J'installe MySql depuis SSH sur un SheevaPlug, est j'avais réussi il y as quelque semaines d'installer Torrentflux4btr depuis ton tuto avec quelques modifs, mais la je sèche.
J'aurai souhaité un peut d'aide

définition du password root

Posté par Lone Wolf le 02/06/2010 21:11
Bonjour,

la commande permet de définir un password root sur une installation Mysql qui n'en a pas. Si ton installation a un mot de passe root pour mysql comme cela semble être le cas, tu peut ignorer cette commande et poursuivre avec la suite du guide.

Bon courage.

problème démarrage

Posté par Morph le 16/12/2010 08:47
Bonjour,
je viens d'installer une debian 5 et j'essaye de suivre ce tuto mais je bloque à la première commande -_-'

"DEBIAN_FRONTEND='noninteractive' command apt-get install mysql-server apg"

Il me dit qu'il va installer des paquets ... ok ...

et Ensuite durant l'installation j'ai "Starting MySQL database server: mysql ..... failed!"

Avec un "Sub-process /usr/bin/dpkg returned an error code (1)".

Quelqu'un peut-il m'aider ?

Merci d'avance.

2 solutions

Posté par Lone Wolf le 16/12/2010 09:50
Bonjour,

Regardez dans les logs de MySQL pourquoi le démarrage a échoué (/var/log/mysql.err et /var/log/mysql.log), vous trouverez des indications sur le problème de démarrage, et vous pourrez le résoudre.

Une autre solution, c'est purger mysql : apt-get --purge autoremove mysql-server
et de le réinstaller, mais le résultat n'est pas garanti.

Bonne chance

phpmyadmin innaccessible sous squeeze

Posté par Guillaume le 24/12/2011 14:21
Bonjour

Je suis votre tutoriel mysql pour debian (qui est d'ailleurs excellent!) car étant étudiant en dut Réseaux / Télécoms je réalise un projet tuteuré sur le firewall nufw couplé à l'ids snort. Et j'ai besoin d'installer un serveur mysql qui va en partie me servir à stocker les logs de nufw.

Je suis débutant sous Linux donc bien souvent je ne sais pas comment vérifier si les commandes sont effectives chez moi ou pas.
Du coup je n'arrive pas à identifier le probleme suivant : je suis votre tutoriel en utilisant mysql-tool (plus simple pour moi) et arrivé à la fin du paragraphe sur phpmyadmin, quand je clique sur http://localhost/phpmyadmin/, j'ai un 404 error.
Pourtant j'ai vérifié que tous les logiciels sont installés (j'ai aussi installé lighttpd je vous rassure!)

Je vous serais reconnaissant si vous pouviez m'accorder un peu d'assistance dès que vous êtes disponible.

Merci à vous et bonnes fêtes!

PhpMyAdmin

Posté par Lone Wolf le 24/12/2011 17:01
Bonjour,

l'email que vous avez utilisé dans le formulaire de contact est invalide. Voici ma réponse:

je serais disponible à partir de lundi pour vous prêter assistance. En attendant, voici quelques points à vérifier:

Assurez-vous que le paquet phpmyadmin est installé et que vous avez sélectionné la configuration automatique le lighttpd lors de son installation. Vérifiez aussi qu'apache 2 n'est pas déjà présent sur votre machine en plus de lighttpd. Dans ce cas, reconfigurez phpmyadmin pour apache2.

Pour reconfigurer phpmyadmin:

dpkg-reconfigure phpmyadmin

Un guide mis à jour pour l'installation de MySQL est disponible sur http://howto.biapy.com/ Je vous conseille d'utiliser ce nouveau site plutot que howto.landure.fr


Cordialement,
Pierre-Yves Landuré

Mot clé "Command"

Posté par Thierry le 19/01/2012 22:16
Bonjour,

Je suis vos articles avec beaucoup d'intérêts mais c'est la première fois que je vois l'utilisation du mot clé "command". J'espère ne pas trop passer pour un "N00B", mais pouvez-vous m'en expliquer l'utiliter ?

Je ne vois pas la différence entre les syntaxes : '' VAR=$(wget...)'' et ''VAR=$(command wget...)''

Merci d'avance,

T.

command

Posté par Pierre-Yves Landuér le 20/01/2012 09:53
Le mot clé "command" permet de lancer l'outil sans tenir compte des éventuels alias définis.

Par exemple, si l'alias "rm" est défini avec "rm -i" les deux lignes suivantes auront deux résultats différents :

command rm mon-fichier <- pas de demande de confirmation

rm mon-fichier <- demande de confirmation.

Un autre exemple flagrant est :

command ls

ls

car souvent ls est un alias de ls --color=auto

Pour information, ce site est en cours de réécriture sur http://howto.biapy.com/

Sincèrement,
Pierre-Yves Landuré

Merci

Posté par Thierry le 20/01/2012 18:26
Voilà une réponse rapide. Merci beaucoup, j'ai encore appris un truc.

Je vois beaucoup mieux l'utilité : dans le cas de scripts distribués, pour éviter que les alias ne pertude le fonctionnement.

Thierry

Ps: j'aivais bien vu l'autre site, mais je viens ici surtout pour m'inspirer des bout de codes, etc...

BlogBang
Navigation
 

Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio