Installer et configurer MySQL sur Debian
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
- Merci aux participants à la discussion autour de l'article Drop all tables in a MySQL database.
Lenny et PHPMyAdmin
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
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
Ca marche impec! (j'ai fait installation et création de base)
Site ajouté à mes bookmarks.
A+
François
debian testing
domaine usvn
ERROR 1045 (28000)
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
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
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
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
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
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"
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
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
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...
phpMyAdmin introuvable sur Debian Lenny
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 =)