Mysql bascule master slave
De BlaxWiki
Révision datée du 15 juin 2021 à 12:23 par 127.0.0.1 (discussion) (Page créée avec « <pre> >>>>>>>>> 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... »)
>>>>>>>>> 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