Mysql bascule master slave

De BlaxWiki
Aller à la navigationAller à la recherche
>>>>>>>>> contexte >>>>>>>>>
la VM sql1.ircem (Master actuellement) est actuellement sur HV2 à SO,
pour préparer le future déménagement vers LC (du HV2+FW2)

on inverse le rôle Master/Slave MySQL entre sql1.ircem (Master actuellement) et sql2.ircem (Slave actuellement) pour réduire le temps d'indisponibilité lors du déplacement et on inverse les ip des eth0
<<<<<<<<< contexte <<<<<<<<< 

Procédure à suivre:

2) Vérification que le slave est bien à jour.
Se logguer sur le mysql de sql1.ircem, et passer les bases en read only :
FLUSH TABLES WITH READ LOCK;

Regarder la position du master :
show master status;


Se logguer sur le mysql de sql2, et vérifier la position du slave :
show slave status\G;

Si la position du slave est la même que le master (Read_Master_Log_Pos),  le slave est bien à jour, sinon attendre quelques secondes et revérifier.

Quand c'est ok, on arrete alors le service Mysql sur sql1.ircem ET sql2.ircem


2.1) On va intervertir les ip "mysql" des 2 serveurs, cette ip n'est pas l'ip par laquelle on administre / supervise le serveur
Sur sql1.ircem :
ifdown eth0

Sur sql2.ircem
ifdown eth0
cp -f /root/eth0.new /etc/sysconfig/network-scripts/ifcfg-eth0
ifup eth0
## S assurer que eth0 a bien l ip 10.82.15.136


Sur sql1.ircem
ifdown eth0
cp -f /root/eth0.new /etc/sysconfig/network-scripts/ifcfg-eth0
ifup eth0
## S assurer que eth0 a bien l ip 10.82.15.137





2.2) Bascule master / slave 

Sur Sql1 :
cp -rp /var/lib/mysql    /var/lib/mysql.master
# on supprime tous les fichiers pour ne garder que les bases
rm -f /var/lib/mysql/*
# on supprime les binlog
rm -f /var/log/mariadb/sql*bin*
# copie du new my.cnf avec les options de slave (l'ancien my.cnf est backupé sur /etc/my.cnf.20210115.master)
cp /etc/my.cnf.20210115.slave          /etc/my.cnf


Sur Sql2 :
mv /var/lib/mysql        /var/lib/mysql.slave
mkdir  /var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
# on supprime les binlog
rm -f /var/log/mysql/sql2*bin*
# copie du new my.cnf avec les options de master (l'ancien my.cnf est backupé sur /etc/my.cnf.20210115.slave)
cp /etc/my.cnf.20210115.master       /etc/my.cnf


Depuis sql1 on va copier les bases vers sql2 lancer la commande :
scp -rp /var/lib/mysql/* root@10.82.16.134:/var/lib/mysql/


La configuration au niveau du user replicadmin a deja été faite dans la base mysql pour autoriser les connexions depuis les ip 10.82.15.136 & 10.82.15.137

On démarre mysql sur les 2 sql.

Sur SQL2, on vérifie le status du master (la position ne doit pas changer vu que les sites sont en maintenance)
SHOW MASTER STATUS;


Sur SQL1, on definit le status du slave (adapter le MASTER_LOG_FILE & MASTER_LOG_POS à ce qu à retourné le show master status sur sql2 )
SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='10.82.15.136', MASTER_USER='replicadmin', MASTER_PASSWORD='4a8d13as', MASTER_LOG_FILE='XXXXXX', MASTER_LOG_POS=XXX;
START SLAVE;
SHOW SLAVE STATUS\G