Configurer un serveur de bases de données MySQL/MariaDB sous Slackware

Cet article décrit la mise en place d’un serveur de bases de donnéesMySQL/MariaDB sous Slackware. MySQL est le système de bases de données le plus populaire du monde de l’Open Source. Un grand nombre d’applications web utilisent MySQL comme moteur de bases de données : wikis, moteurs de blogs et de forums, systèmes de gestion de contenu, etc.

On entend parfois dire que MySQL n’est pas un « vrai » système de bases de données en comparaison à des systèmes comme Oracle ou DB/2. Contentons-nous de savoir que MySQL est utilisé, entre autres, par Facebook, Google et Yahoo!

Slackware 14.1 a remplacé MySQL par le fork communautaire MariaDB, suite au rachat de MySQL par Sun Microsystems et Oracle. La gouvernance du projet MariaDB est assurée par la fondation MariaDB. Elle confère au logiciel l’assurance de rester libre.

Choisir un fichier de configuration pour MySQL

Cette section ne concerne pas MariaDB. Elle est uniquement valable pour MySQL, inclus dans Slackware jusqu’à la version 14.0.

Sélectionner un fichier de configuration dans la panoplie de modèles disponibles selon les besoins dans le répertoire /etc/mysql :

  • my-small.cnf pour une base de données taille S
  • my-medium.cnf pour une base de données taille M
  • my-large.cnf pour une base de données taille L
  • my-huge.cnf pour une base de données taille XL
  • my-innodb-heavy-4G.cnf pour une base de données taille XXL

Exemple :

# cd /etc/mysql
# cp my-small.cnf my.cnf

Initialiser le serveur MySQL/MariaDB

Initialiser le répertoire de données MySQL/MariaDB :

# mysql_install_db
Installing MySQL system tables...
OK
Filling help tables...
OK
...

Régler les permissions :

# chown -R mysql:mysql /var/lib/mysql

Activer le démon MySQL :

# chmod +x /etc/rc.d/rc.mysqld

Lancer le démon MySQL :

# /etc/rc.d/rc.mysqld start
mysqld_safe Logging to '/var/lib/mysql/alphamule.err'.
mysqld_safe Starting mysqld daemon with databases from 
  /var/lib/mysql

Il faut éventuellement appuyer une deuxième fois sur [Entrée] pour récupérer l’invite de commandes.

Sécuriser le serveur MySQL/MariaDB

MySQL/MariaDB dispose de l’utilitaire mysql_secure_installation pour assurer la sécurité d’une installation fraîche sur une machine de production. Ce programme permet d’effectuer quelques démarches de sécurisation essentielles :

  1. Définir un mot de passe root MySQL (ne pas confondre avec le compte root Linux).
  2. Supprimer les comptes root MySQL accessibles de l’extérieur.
  3. Supprimer les connexions anonymes.
  4. Supprimer la base de données de test.

Lancer la sécurisation :

# mysql_secure_installation
...
Set root password? [Y/n] --> Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] --> Y
... Success!
Disallow root login remotely? [Y/n] --> Y
... Success!
Remove test database and access to it? [Y/n] --> Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reload privilege tables now? [Y/n] --> Y
... Success!
Cleaning up...

Lancer une connexion à la console MySQL :

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.

Afficher les bases de données :

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

Utiliser la base de données mysql :

mysql> use mysql;
Database changed

Afficher les utilisateurs :

mysql> select user, host, password from user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6883418C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
| root | 127.0.0.1 | *6883418C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
| root | ::1       | *6883418C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
+------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)

Si l’on n’utilise pas l’IPv6, on peut désactiver root@::1 comme ceci :

mysql> delete from user where host = '::1';
Query OK, 1 row affected (0.00 sec)

Vérifier le résultat de l’opération :

mysql> select user, host, password from user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6883418C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
| root | 127.0.0.1 | *6883418C147A759B04D78A2D1E4E0C5BB0CDD1B4 |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)

Quitter la console MySQL :

mysql> quit;
Bye

Exemple de base de données

Se connecter au moniteur MySQL :

# mysql -u root -p
mysql>

Créer une base de données webapp :

mysql> create database webapp;

Afficher les bases de données :

mysql> show databases;

Créer un utilisateur webappuser qui aura tous les droits sur webapp :

mysql> grant all on webapp.* to webappuser@localhost
   - > identified by 'motdepasse';

Attention, le mot de passe apparaît en clair dans le moniteur MySQL !

mysql> quit;

Si l’on souhaite supprimer cette base de données :

mysql> drop database webapp;

Sauvegarde

La commande mysqldump permet de sauvegarder une base de données MySQL sous forme d’une série d’instructions SQL.

L’exemple suivant effectue une sauvegarde complète de la base de données cmsms :

$ mysqldump -u root -p cmsms > sauvegarde_cmsms.sql

L’option --all-databases permet de sauvegarder l’ensemble des bases de données d’un serveur :

$ mysqldump -u root -p --all-databases > sauvegarde.sql

Les fichiers SQL résultants sont parfois très volumineux, étant donné qu’il s’agit d’un format texte simple. Dans ce cas, on peut les compresser durant la sauvegarde même. Voici ce que cela donne pour les deux exemples précédents :

$ mysqldump -u root -p cmsms | gzip -c > sauvegarde_cmsms.sql.gz
$ mysqldump -u root -p --all-databases | gzip -c > sauvegarde.sql.gz

Restauration

Dans l’exemple suivant, on va restaurer la base de données cmsms depuis le fichier de sauvegarde créé ci-dessus :

$ mysqladmin -u root -p create cmsms
$ mysql -u root -p cmsms < sauvegarde_cmsms.sql

Pour restaurer « à la louche » une sauvegarde globale, il suffit d’invoquer la commande suivante qui gère également la création des bases de données :

$ mysql -u root -p < sauvegarde.sql

La restauration à partir d’une sauvegarde compressée peut s’effectuer comme ceci :

$ mysqladmin -u root -p create cmsms
$ gunzip -c sauvegarde_cmsms.sql.gz | mysql -u root -p cmsms

Et pour une sauvegarde globale :

$ gunzip -c sauvegarde.sql.gz | mysql -u root -p

Si l’on obtient des erreurs de connexion aux bases restaurées, il faudra se connecter au moniteur MySQL, puis :

mysql> flush privileges;

Sauvegardes automatiques

Mon dépôt Github fournit un script Bash sqldump.sh dans le répertoire template/backup. Ce script permet d’effectuer des sauvegardes automatiques de l’ensemble des bases MySQL d’un serveur, individuellement et « à la louche ». Les sauvegardes se présentent sous forme d’une série de fichiers compressés *.sql.gz rangés dans le répertoire /sqldump. Par la suite, ces fichiers pourront être récupérés par un serveur de sauvegardes.

# cd
# git clone https://github.com/kikinovak/microlinux
# cd microlinux/template/backup/
# cp sqldump.sh /usr/local/sbin/
# chmod 0700 /usr/local/sbin/sqldump.sh
# vim /usr/local/sbin/sqldump.sh
Ce contenu a été publié dans Documentation Microlinux, Slackware, avec comme mot(s)-clé(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *