Changer le répertoire par défaut de Mysql

Dans la suite de mon article précédent sur mysql (sauvegarde-base-de-donnee-mysql) voici un petit article suite à un souci que j’ai rencontré.

Il y a quelques jours, j’étais sur une opération de migrations de base de données. Et sur la fin de mes opérations, message d’erreur. Rapidement, je me rends compte que je n’ai en fait plus de place sur le disque.

Bien qu’il y avait un disque supplémentaire mis en place, la configuration était toujours par défaut. Et donc, le disque système à vite saturé (car petit disque).

Voici donc la manipulation à effectuer pour changer de répertoire par défaut.

Dans la suite de cet article, j’utilise /mnt/mysql comme emplacement pour mon nouveau disque.

Identification du répertoire par défaut

Dans un premier temps, je vais commencer par identifier mon répertoire par défaut.
Pour cela, je me connecte à la base de données et je tape la commande suivante :

select @@datadir;

Et celle-ci me retourne :

+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+

Copie de données vers le nouveau disque

Dans mon cas, j’avais déjà pas mal de base de données créée. De ce fait, je vais déplacer toutes mes bases de données vers le nouveau disque.

Dans un premier temps, je vais couper mon service afin d’éviter tout changement de données pendant la copie, et donc corruption possible de celles-ci.

Pour cela, je tape la commande :

systemctl stop mariadb          #stop mon service
systemctl is-active mariadb     #indique l'état du service 

Tout est ok. Je vais à la suite de cela copier mes données. Pour cela, j’utilise la commande suivante :

cp -R -p /var/lib/mysql/* /mnt/mysql

Changement configuration

Même si la copie n’est pas encore finie, je peux d’ores et déjà changer ma configuration. Attention toutefois, à ne pas relancer le service avant la fin de la copie.

Je vais donc modifier mon fichier de configuration my.cnf. Mon fichier de configuration se trouve généralement dans /etc ou /etc/mysql

vim /etc/my.cnf

Puis, je modifie les informations suivantes:

datadir=/mnt/mysql
socket=/mnt/mysql/mysql.sock

Ainsi que :

port=3306
socket=/mnt/mysql/mysql.sock

Une fois que la copie des fichiers est terminé, il ne me reste plus qu’a redémarrer les services.

systemctl stop mariadb
systemctl is-active mariadb

Cas particulier : Selinux

Dans le cas où j’utilise SELinux sur le serveur.
J’ajoute le contexte de sécurité SELinux à /mnt/mysql avant de redémarrer mon service.

semanage fcontext -a -t mysqld_db_t "/mnt/mysql(/.*)?"
restorecon -R /mnt/mysql

Vérification

Dorénavant, toutes les bases de données doivent ce créé dans /mnt/mysql.

Pour vérifier cela, je me reconnecte à la base de données et identifie le répertoire

select @@datadir;

Et celle-ci me retourne :

+-----------------+
| @@datadir       |
+-----------------+
| /mnt/mysql/ |
+-----------------+

Toutes les bases créées apparaîtront donc maintenant dans /mnt/mysql.

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.