L’objectif de cet article est de décrire la procédure pour déplacer et modifier le répertoire de données (datadir) MySQL vers un nouveau répertoire sur Debian 8.
Cet article est une suite de celui sur la resynchronisation d’un Slave MySQL : http://blog.capdata.fr/index.php/replication-mysql-resynchronisation-dun-slave-mysql.
En effet, suite à la resynchronisation du Slave MySQL avec le Master, notre client nous a demandé de faire en sorte que le répertoire de données sur le Slave soit le même que sur le Master.
Le Master avait son répertoire de données (datadir) sur /opt/mysql alors que le Slave avait le sien sur le répertoire par défaut, /var/lib/mysql.
Nous allons donc faire en sorte que les données et le répertoire de données correspondent au répertoire /opt/mysql sur le Slave.
Voici donc la procédure pour déplacer les données MySQL vers le nouvel emplacement et modifier la valeur du répertoire de données (datadir) dans la configuration MySQL sur le Slave.
Slave (obelix)
- Connaitre le répertoire du datadir :
mysql -uroot -p******* mysql> select @@datadir; +-----------------+ | @@datadir | +-----------------+ | /var/lib/mysql/ | +-----------------+
- Arrêter le service MySQL :
sudo /etc/init.d/mysql stop sudo /etc/init.d/mysql status
- Si la taille du répertoire de données n’est pas trop volumineuse, on peut copier directement le répertoire de données MySQL vers le nouvel emplacement (sinon compresser le répertoire et le copier) :
sudo cp -R -p /var/lib/mysql /opt
- Renommer l’ancien répertoire en backup :
sudo mv /var/lib/mysql /var/lib/mysql.bak
- Modifier la configuration du datadir dans le fichier de configuration MySQL situé dans /etc/mysql/my.cnf pour correspondre à /opt/mysql :
capdata@obelix:~$ cat /etc/mysql/my.cnf | grep datadir datadir = /var/lib/mysql
Remplacer /var/lib/mysql par /opt/mysql :
sudo vi /etc/mysql/my.cnf datadir = /opt/mysql
- Sur Debian, si AppArmor est installé, il faut modifier la configuration des règles de contrôle d’accès pour AppArmor (associe un profil de sécurité à chaque programme pour restreindre les capacités) :
capdata@obelix:~$ cat /etc/apparmor.d/usr.sbin.mysqld | grep /var/lib/mysql /var/lib/mysql/ r, /var/lib/mysql/** rwk,
Remplacer /var/lib/mysql par /opt/mysql :
sudo vi /etc/apparmor.d/usr.sbin.mysqld /opt/mysql/ r, /opt/mysql/** rwk,
Si le package est installé, redémarrer le service AppArmor :
sudo /etc/init.d/apparmor reload
ATTENTION, BIEN VERIFIER QUE LE FICHIER DE CONF /ETC/MYSQL/MY.CNF N’A PLUS LES DROITS EN ECRITURE (777) POUR LES AUTRES CAR SINON LE SERVICE MYSQL NE VOUDRA PAS DÉMARRER.
- Redémarrer le service MySQL :
sudo /etc/init.d/mysql start
- Vérifier le status MySQL :
sudo /etc/init.d/mysql status
mysqladmin -uroot -p******* status
- Vérifier côté base de la bonne prise en compte du nouveau répertoire de données (datadir) :
mysql -uroot -p*********** mysql> select @@datadir; +-------------+ | @@datadir | +-------------+ | /opt/mysql/ | +-------------+ 1 row in set (0.00 sec)
Et voila, votre répertoire de données (datadir) MySQL a bien été déplacé et est positionné vers son nouvel emplacement !
A bientôt pour de nouveaux articles sur MySQL.
Erwan Ollitrault
Continuez votre lecture sur le blog :
- Réplication MySQL : Resynchronisation d’un Slave MySQL (Capdata team) [MySQL]
- Migrer d’un cluster Galera MariaDB 10.3 vers MariaDB 10.5 avec la réplication logique (David Baffaleuf) [ContainerMySQLNon classé]
- La fin de mysql_upgrade à partir de MySQL 8.0.16 (Capdata team) [MySQL]
- Nouveautés MySQL 8.0 : Variables persistés (Capdata team) [MySQL]
- Restauration point-in-time avec MariaDB Galera Cluster et mariabackup (David Baffaleuf) [MySQL]
Bonjour alfpipe,
Merci pour le retour et cette erreur à la fin de la procédure 🙂 Effectivement, j’ai du me tromper avec un copier/coller et je n’ai pas fait attention à la fin !
Je vais modifier l’article pour que le résultat final soit bien ce qui était attendu, c’est à dire /opt/mysql
N’hésite pas à voir les autres articles et nous donner ton retour si tu as des questions ou besoin de plus précisions 😉
Erwan