Serveur dédié : déplacer les bases de données MariaDB ou MySQL sur une autre partition

J’ai récemment installé un plugin qui met en cache les requêtes API Amazon mais dont la table SQL gonfle énormément – plus de 5 Go à l’heure où j’écris ces lignes.

Le problème, c’est que cela remplit la partition racine du serveur, qui est utilisée par défaut par MariaDB pour stocker les fichiers des bases de données.

Lorsque j’ai créé ce serveur, j’ai utilisé la configuration par défault d’OVH, ce qui est une erreur grossière : la partition racine (/) fait 10 Go alors que la partition /home fait 740 Go… même pour un desktop, on ne fait plus cela parce que cela laisse trop peu pour le système alors imaginez un peu pour un serveur !

Nous avons donc le choix entre re-partitionner le disque (autant vous dire que cela ne me tente que très moyennement) ou alors changer le dossier des bases SQL pour les mettre sous /home.

Ce tutoriel vous permet donc de délocaliser les bases de données MySQL/MariaDB sur une autre partition. Le serveur tourne sur la dernière version de Debian.

Vérification du chemin des bases MariaDB

Tout se passe via le terminal. Je vous conseille de faire une sauvegarde de vos bases avant de commencer.

Commençons par vérifier le dossier dans lequel se trouve nos bases de données:

mysql -u root -p

Entrez votre mot de passe root puis entrez la commande suivante:

select @@datadir;Code language: CSS (css)

Résultat:

+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)Code language: JavaScript (javascript)

Ajustement de systemd pour MariaDB

Ceci est une étape fondamentale du tutoriel. Si vous ne faites pas cela, MariaDB ne démarrera pas avec votre nouveau dossier car, par défaut, il n’a pas accès à /home.

Il faut donc que nous lui donnions explicitement l’accès :

systemctl edit mariadb

Dans le fichier qui s’ouvre, entrez le code suivant:

[Service]
ProtectHome = falseCode language: JavaScript (javascript)

Enregistrez le fichier tel quel, sans changer le nom. Le fichier que vous venez de créer est /etc/systemd/system/mariadb.service.d/override.conf

Appliquez maintenant les changements :

systemctl daemon-reload

Un nouveau répertoire pour nos bases de données

Nous pouvons maintenant créer le nouveau répertoire qui accueillera les fichiers de nos bases de données. Par simplicité, je choisis de tout mettre sous /home/mysql :

# On crée notre nouveau dossier:
mkdir /home/mysql

# On donne les droits de l'ancien dossier à notre nouveau dossier:
chown --reference=/var/lib/mysql /home/mysql

# On donne les permissions de l'ancien dossier à notre nouveau dossier
chmod --reference=/var/lib/mysql /home/mysql

# On arrête le service MySQL/MariaDB avant de copier les fichiers:
service mysql stop

# On copie les fichiers dans notre nouveau dossier, en gardant les permissions existantes (-p)
cp -rp /var/lib/mysql/* /home/mysql/Code language: PHP (php)

Edition de my.cnf

Il nous reste maintenant à éditer les fichiers de configuration de MariaDB, my.cnf ; sous Debian, ils sont au nombre de deux :

nano /etc/mysql/my.cnf

Editez le fichier /etc/mysql/my.cnf et sous[mysqld]modifiez le chemin de la directive datadir:

datadir=/home/mysqlCode language: JavaScript (javascript)

Editez le fichier /etc/mysql/mariadb.conf.d/50-server.cnf et sous[mysqld]modifiez le chemin de la directive datadir:

datadir=/home/mysqlCode language: JavaScript (javascript)

Il reste un aspect à configurer : AppArmor doit permettre au serveur SQL d’écrire dans votre nouveau répertoire.

Nous allons donc créer un alias entre notre nouveau répertoire et l’ancien répertoire.bOn ouvre donc le fichier d’alias d’AppArmor :

sudo nano /etc/apparmor.d/tunables/alias

Et on y ajoute:

alias /var/lib/mysql/ -> /home/mysql/,Code language: JavaScript (javascript)

Il ne reste plus qu’à redémarrer AppArmor pour enregistrer les changements :

service apparmor restart

Démarrez maintenant le serveur MariaDB :

service mysql start

Vérifiez que le chemin a bien été modifié :

mysqladmin var -u root -p | grep datadirCode language: JavaScript (javascript)

Résultat

| datadir | /home/mysql/Code language: JavaScript (javascript)

Conclusion

Nous venons de changer le dossier par défaut de nos bases de données MariaDB, en les plaçant sur une autre partition de manière à libérer un peu d’espace pour notre partition racine.

Envie d'ajouter des fonctionnalités exceptionnelles à votre site WordPress ou WooCommerce? Je suis là pour vous aider.

Explorons les possibilités ensemble »

Articles conseillés :

Matt

Matt Biscay est développeur WordPress et WooCommerce certifié chez Codeable, ainsi que sysadmin qualifié et enseignant-chercheur. Passionné par le code performant et les solutions sécurisées, je m'efforce d'offrir une expérience utilisateur exceptionnelle sur chaque projet.

Vous avez aimé cet article ? Vous avez un projet en tête et vous pensez que je pourrais vous aider à le concrétiser ? N'hésitez pas à me contacter, je serais ravi de discuter avec vous de votre projet !

Opinions