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.