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.
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).
Il faut arrêter le service MariaDB avec la commande suivante :
systemctl stop mariadb.service
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
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.
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 :
Ensuite, nous indiquons à systemd que nous avons modifié ses fichiers de configuration :
systemctl daemon-reload
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
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
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.
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.
Autres liens rapides pouvant vous intéresser