Déplacer le répertoire /var/lib/mysql sur MariaDB

Pour éviter la saturation de la partition système, il est souvent judicieux de déplacer le répertoire /var/lib/mysql vers le répertoire /home . Le déplacement du répertoire /var/lib/mysql sous MariaDB n'est pas aussi évident que pour MySQL.

Pré-requis - Difficultés

Il faut bien sûr un serveur MariaDB en fonctionnement. Ce tutoriel a été testé sur une distribution Debian 9 (Strech), Debian 10 (Buster) et Debian 11 (Bullseye). Toutes les lignes de commande s'exécute dans un terminal en mode super-administrateur (root).

Difficulté
Moyen

Arrêt de MariaDB

Il faut arrêter le service MariaDB avec la commande suivante :

systemctl stop mariadb.service

Déplacement du répertoire /var/lib/mysql

Nous copions l'ensemble du répertoire /var/lib/mysql vers le répertoire /home (attribut -R de la commande cp) et nous donnons les droits nécessaires (attribut -p de la commande cp). Puis nous archivons le répertoire d'origine

cp -R -p /var/lib/mysql /home
mv /var/lib/mysql /var/lib/mysql.bak

Modification de la configuration de MariaDB

Nous modifions le chemin de la base de données dans le fichier de configuration de MariaDB. Le fichier à modifier est /etc/mysql/mariadb.conf.d/50-server.cnf : On utilise nano :

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Recherchez la ligne suivante :

datadir         = /var/lib/mysql

et modifiez là pour indiquer le nouveau chemin

datadir         = /home/mysql

Enregistrez puis quittez.

Modification du service mariadb.service

MariaDB possède un système de protection plus avancé que MySQL. Il faut donc autoriser la modification du chemin datadir dans la configuration de MariaDB et pour éviter de devoir faire cette modification à chaque mise à jour du paquet maridb-server, nous devons configurer les fichiers de démarrage de systemd.

Nous créons un répertoire mariadb.service.d avec la commande mkdir :

mkdir /etc/systemd/system/mariadb.service.d

Puis nous créons le fichier de configuration :

nano /etc/systemd/system/mariadb.service.d/protecthome.conf

Nous y ajoutons ceci :

[Service]
ProtectHome=false

Si cette étape n'est pas réalisée, l'erreur mysql can’t create test files .lower-test apparaîtra au démarrage du service avec les messages d'erreurs suivants présent dans les logs :

  • /usr/sbin/mysqld: Can't create file '/var/log/mysql/error.log' (errno: 13 "Permission denied")
  • [ERROR] mysqld: File '/home/log/mysql/mysql-bin.index' not found (Errcode: 13 "Permission denied")

Ensuite, nous indiquons à systemd que nous avons modifié ses fichiers de configuration :

systemctl daemon-reload

Supprimer le fichier tc.log

Si le fichier /home/mysql/tc.log est existant, il est nécessaire de l'effacer. Nous éviterons l'erreur [ERROR] Can’t init tc log. Pour vérifier la liste des fichiers .log présents :

ls /home/mysql/*.log

Si le fichier /home/mysql/tc.log est présent dans la liste, un petit

rm  /home/mysql/tc.log 

Le cas de app.armor

Si app.armor est installé sur votre serveur, il faut autoriser les modifications des fichiers de configuration de MariaDB. Nous éditons donc le fichier /etc/apparmor.d/usr/sbin.mysqld

nano /etc/apparmor.d/usr/sbin.mysqld

Et il faut remplacer toutes les références de /var/lib/mysql en /home/mysql. Vous sauvegardez et fermez l'éditeur. On redemarre le service

systemctl reload apparmor

Démarrage du service mariaDB

Maintenant, il suffit de redémarrer le service mariaDB avec la ligne suivante :

systemctl start mariadb.service

puis un petit :

systemctl status mariadb.service

pour vérifier que tout fonctionne correctement.

Aller plus loin

Par précaution, il faut vérifier les tables. Nous allons exécuter l'utilitaire d'auto-réparation mysqlcheck.

mysqlcheck -u root -p --auto-repair --check -A

L'utilitaire vous demandera le mot de passe root de votre accès à mariaDB. Puis la vérification se lancera.

Notes de version

  • [01/07/2018] : Création de l'article
  • [22/09/2020] : MAJ pour Debian Buster (Debian 10)
  • [02/11/2021] : MAJ Debian Bullseye (Debian 11)
  • [12/06/2022] : Amélioration de la gestion systemd et ajout du cas de apparmor

Auteurs et sources