Replication Master - Slave MySQL

Afin de s’assurer que nos bases de données soient toujours accessibles, y compris en cas de panne de notre serveur, il est possible de mettre en place une réplication. Celle-ci permettra à un second serveur (le slave) de rejouer toutes les actions qui ont lieu sur le premier serveur (le master). En cas d’incident, notre second serveur contient les mêmes données que le serveur master. Il suffit donc de configurer les différents services pour qu’ils envoient leurs requêtes vers l’ancien serveur slave (qu’il faudra temporairement paramétrer en tant que master).

aptitude install mysql-server
mysq_install_db
mysql_secure_installation

Configuration du Master

Editer le fichier /etc/mysql/my.cnf pour effectuer les changements suivants :

  • bind-address doit afficher l’IP publique du server master au lieu de 127.0.0.1
  • décommenter server-id (il doit être égal à 1)
  • décommenter log_bin

Une fois les changements enrgistrés, redémarrer le service MySQL :

systemctl restart mysql.service

Se connecter au serveur MySQL (via la commande mysql -u root -p) :

CREATE USER 'replication'@'5.135.179.164' IDENTIFIED BY 'XXXXXXXX';
GRANT REPLICATION SLAVE ON * . * TO 'replication'@'IP_SERVER_SLAVE';
FLUSH PRIVILEGES;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

Configuration du Slave

Editer le fichier /etc/mysql/my.cnf pour effectuer les changements suivants :

  • bind-address doit afficher l’IP publique du server master au lieu de 127.0.0.1
  • décommenter server-id (il doit être égal à 2)
  • relay-log = /var/log/mysql/mysql-relay-bin.log

Une fois les changements enrgistrés, redémarrer le service MySQL :

systemctl restart mysql.service

Se connecter au serveur MySQL (via la commande mysql -u root -p) :

CHANGE MASTER TO MASTER_HOST='IP_SERVER_MASTER', MASTER_USER='replication', MASTER_PASSWORD='XXXXXXXX', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=378;
START SLAVE;

On vérifie que tout fonctionne bien avec la commande :

SHOW SLAVE STATUS;

Sur le master, on retire les lock sur les tables :

UNLOCK TABLES;