Guide complet sur l’installation et la configuration d’un serveur mysql sécurisé sur ubuntu 12.04 lts
Ca fait un moment que ça me trottait, voici enfin le guide complet sur la gestion d’un serveur mysql.
Mysql est le système de gestion de base de données le plus communément utilisé dans les CMS tel que WordPress, Joomla ou Drupal. Il est bien plus simple d’installation que ses concurrents (Informix, Oracle …) puisqu’il se trouve dans les dépôts.
Installation
On commence par la mise a jour de l’OS
sudo su apt-get update apt-get upgrade
Puis on installe le paquet mysql-server qui a pas mal de dépendances notamment mysql-client pour pouvoir communiquer avec le serveur. Il vous faudra choisir un mot de passe pour l’utilisateur root, qui est a ne pas confondre avec le compte root de l’OS.
apt-get install mysql-server
Une bonne pratique est de sécuriser le serveur en supprimant l’accès au compte root et de supprimer comptes anonymes et base de test.
mysql_secure_installation
Configuration
Par défaut mysql-server n’est joignable que sur la machine elle même, on va donc changer le comportement pour permettre l’accès aux autres machines d’un réseau en commentant la ligne de bind-address
vim /etc/mysql/my.cnf
#bind-address = 127.0.0.1
Et on peut vérifier l’état d’écoute du port
netstat -tnlpv | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 12951/mysqld
Mise en place des bases
Création d’une base
Toutes les opérations administratives se font avec le compte root de mysql.
mysqladmin -u root -p create MABASE
Attribution des droits d’un user pour la base
mysql -u root -p GRANT ALL ON MABASE.* TO MONUSER@'%' IDENTIFIED BY 'MONPASSWORD'; GRANT ALL ON MABASE.* TO MONUSER@localhost IDENTIFIED BY 'MONPASSWORD'; FLUSH PRIVILEGES;
Quelques explications :
- Les 2 premières lignes paraissent les mêmes, mais l’endroit d’ou on se connecte diffère
- Le % représente n’importe quel IP, on pourrait tout aussi bien mettre une IP particulière
- Localhost indique que l’on peut se connecter à MABASE avec MONUSER sur le serveur mysql seulement
- La dernière ligne indique un rechargement des droits ce qui aura comme conséquence de rendre effectif nos changements
On sort de la console mysql en tapant soit exit soit en utilisant le combo Ctrl+d .
Administration
Backup
Rien de plus simple en utilisant la commance mysqldump
mysqldump -u MONUSER -p MABASE > MABASE.sql
Ou en y rajoutant le drop des anciennes tables avant de restaurer.
mysqldump --add-drop-table -u MONUSER -p MABASE > MABASE.sql
Restore
Le restore d’une base est également aisé.
mysql -u MONUSER -p MABASE < MABASE.sql
Si vous avez installé phpmyadmin, il peut être nécessaire de reconfigurer le paquet.
dpkg-reconfigure phpmyadmin
Check, Repair , Optimize
Il peut arriver que des bases soient corrompues ou que le requetage soit lent. Le binaire mysqlcheck permet de faire le boulot. Ici pour toutes les bases.
mysqlcheck -u root -p --auto-repair --check --optimize --all-databases
Troubleshooting
Host is blocked because of many connection errors
Il peut arriver qu’une machine voit son accès au serveur mysql bloqué pour diverses raisons :
- Une tentative de hack
- Une script de monitoring foireux
- Un plugin mal écrit
Dans ce cas un message est visible dans les logs
Host 'xxxxxxxxxx' is blocked because of many connection errors.
On restaurera via cette commande
mysqladmin -u root -p flush-hosts
Le nombre de connexion en défaut acceptables est par défaut 10. On peut verifier la valeur via :
mysql -u root -p SHOW VARIABLES;
Ce qui devrait afficher :
| max_connect_errors | 10
Pour modifier ce comportement il faut lancer mysql avec cet argument pour le monter à 100 :
mysqld --max_connect_errors=100
mysql.proc is corrupted
En cas de migration de serveur ou d’update de mysql il m’est déjà arrivé d’avoir ce message d’erreur :
Cannot load from mysql.proc. The table is probably corrupted
Dans ce cas pas de souci il suffit de lancer la commande
mysql_upgrade -u root -p
Il se peut également que cela ne suffise pas dans ce cas on rajoute un petit –force
mysql_upgrade --force -u root -p
Clients GUI
Le client le plus connu est phpmyadmin, mais il ne me convient plus car il nécessite une installation et une configuration.
Sinon il y a encore plus gros et avec plus de fonctionnalites c’est Mysql Workbench qui permet en plus de migrer des bases, de faire du design de bases.
Pour ma part je préfère largement Adminer qui est portable en tient en un seul fichier php. Beaucoup plus facile a déployer.
C’est très intéressant tout ça !