Serveur Debian - mysql
Par Seza le samedi 9 juin 2007, 15:03 - Serveur Debian - Lien permanent
CHAPITRE 4 : MYSQL
Pour nos futurs sites internet, nous allons avoir besoin de certain élément, nous possédons déjà le FTP pour créer des utilisateurs à notre guise, nous allons aussi avoir besoin d'une base de données. Aujourd'hui nous allons donc nous occuper de Mysql.
Commençons par installer les paquets nécessaires :
ALBAN@bebeserv:~$ sudo -i Password: bebeserv:~# apt-get update [...] bebeserv:~# apt-get install mysql-client-5.0 mysql-server-5.0 mysql-common [...]
Ceci fait comme pour le FTP commencer par couper le serveur tout frais installer.
bebeserv:~# /etc/init.d/mysql stop [...]
Éditons la configuration :
bebeserv:~# cd /etc/mysql bebeserv:/etc/mysql# nano my.cnf [...]
Dans « [mysqld] »
D'abord la langue ! ( très important :) )
language = /usr/share/mysql/french
Puis puisque dans mon cas je n'ouvrirai pas Mysql à l'extérieur je laisse le
skip-networking bind-address à 127.0.0.1
Pour enregistrer les mauvaises requêtes (coûteuses en performance).
log_slow_queries = /var/log/mysql/mysql-slow.log long_query_time = 2 log-queries-not-using-indexes
Commentez les lignes suivantes, elles sont inutiles car nous ne feront pas de réplication Mysql.
#log_bin = /var/log/mysql/mysql-bin.log #expire_logs_days = 10 #max_binlog_size = 100M
Puisque je compte utiliser Dotclear 2 qui nécessite le moteur « innodb »
, je ne décommenterai pas la ligne suivante :
#skip-innodb
Dans la section « [mysqldump] »
je rajoute ces options :
skip-opt add-drop-table add-locks create-options set-charset disable-keys complete-insert
Enregistrez et quittez. Maintenant vous pouvez relancer Mysql.
bebeserv:/etc/mysql# /etc/init.d/mysql start [...]
Maintenant il va falloir sécuriser Mysql car sont installation d'origine est plein de trou. Entrez dans la console Mysql :
bebeserv:~# mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.0.32-Debian_7etch1-log Debian etch distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> Maintenant que vous êtes dans la console, tapez les commandes suivantes : mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> select User,Host,Password from user; +------------------+-----------+-------------------------------------------+ | User | Host | Password | +------------------+-----------+-------------------------------------------+ | root | localhost | | | root | bebeserv | | | debian-sys-maint | localhost | *23C6BA678DB0427E1A213D86DF1819114D2A80FD | +------------------+-----------+-------------------------------------------+
Nous observons un compte « root »
sous le nom « bebeserv »
qui ne servira pas puisque nous utiliserons uniquement Mysql en local. Nous allons donc le supprimé.
mysql> delete from user where Host <> "localhost"; Query OK, 1 row affected (0.00 sec) mysql> select User,Host,Password from user; +------------------+-----------+-------------------------------------------+ | User | Host | Password | +------------------+-----------+-------------------------------------------+ | root | localhost | | | debian-sys-maint | localhost | *23C6BA678DB0427E1A213D86DF1819114D2A80FD | +------------------+-----------+-------------------------------------------+ 2 rows in set (0.00 sec)
Maintenant modifions le compte « root »
pour plus de sécurité et renommons le au passage (remplacé **** par votre mot de passe dans la seconde commande):
mysql> rename user root@localhost to bebeserv@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> update user set password=password('****') where user = "bebeserv";
Query OK, 1 row affected (0.00 sec)
Enregistrements correspondants: 1 Modifiés: 1 Warnings: 0
mysql> select User,Host,Password from user;
+------------------+-----------+-------------------------------------------+
| User | Host | Password |
+------------------+-----------+-------------------------------------------+
| bebeserv | localhost | *A7581E9CC269EDA8C16D974E1032E393B33DC199 |
| debian-sys-maint | localhost | *23C6BA678DB0427E1A213D86DF1819114D2A80FD |
+------------------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
Parfait ! Appliquons tout ça :
mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
Maintenant vérifions les bases présentes :
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.00 sec)
Parfait encore ! Par défaut Mysql créer un utilisateur vide et une base test que nous aurions du supprimer car inutile voir dangereux pour l'utilisateur sans nom. Mais l'installation dans Debian était déjà propre.
Maintenant quittons la console et tentons de nous loguer en « root »
(« bebeserv »
excuser moi !).
mysql> exit Bye bebeserv:/etc/mysql# mysql -u bebeserv -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 7 Server version: 5.0.32-Debian_7etch1-log Debian etch distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Parfait ! nous pouvons quitter sachant que tout fonctionne bien :
mysql> exit Bye
Voilà ce chapitre est terminé.
bebeserv:/etc/mysql# exit logout ALBAN@bebeserv:~$
Commentaires
Par rapport à la sécurisation de mysql, j'utilise généralement l'application mysql_secure_installation qui permet de fixer le mot de passe root, virer la base de test et autres trucs du genre, pourquoi ne pas l'utiliser ici ?
Salut,
L'installation dans debian est déjà faite avec un minimum de sécurité, comme tu peux le voir la base test et l'utilisateur anonyme sont absent.
L'intérêt ici est surtout de faire pratiqué le futur administrateur à quelques pratiques courantes telles que ajout, modification et supression de compte avec une notion de sécurité incluse. Il pourra ainsi se familiariser avec la console et l'outil mysql aussi.
J'ai déjà entendu parlé de ce script mais je ne l'ai jamais utilisé.
Je pense que sur une source mysql compilé soit même le script que tu présentes doit faire gagner beaucoup de temps.
Supprimer l'utilisateur laisse des traces au niveau des droits. Il vaut mieux faire :
REVOKE ALL PRIVILEGES, GRANT OPTION FROM root@NomDuServeur;
DROP USER root@NomDuServeur;
http://dev.mysql.com/doc/refman/5.0...
http://dev.mysql.com/doc/refman/5.0...
Merci ici aussi pour ta participation,
ça fait plaisir d'avoir des compléments et de se rendre compte des erreurs que l'on fait.
Oula, grosse erreur:
Tu utilises inno-db (bien !)
mais tu désactives les logs binaires. C'est pas bien du tout ça. D'ailleurs je ne savais pas qu'on pouvait utiliser innodb sans les binlog (tu es sûr qu'ils ne sont pas activés quand même ?)
Je crois que la gestion transactionnelle les utilise. Mais sinon, en cas de crash, c'est les logs qui peuvent te sauver la vie (si tu as une sauvegarde des fichiers de la base à chaud).
Mais si tu fais tes sauvegardes avec mysqldump, désactivier les logs, c'est une mauvaise habitude, surtout sur des serveurs plus consistants.
Oui ils sont désactivé en connaissance de cause, InnoDB fonctionne parfaitement sans log binaire.
Les logs binaires sont très utile pour géré les restaurations en cas de crash, la réplication de serveur etc... mais sont aussi consommateur de ressources.
Pour ma toute petite machine qui tient se blog j'ai fais ce choix de ne pas le utiliser. Je fais un instanné avec mysqldump de temps en temps et ça me suffit en terme de sauvegarde. Tant pis si je perd quelques post ou quelques commentaires.
Bien entendu c'est un choix à faire en connaissance des risques que l'on prend (et que j'aurais du expliquer dans ce tuto sûrement).