Dans le cadre de site à forts traffics, de la préparation d’une migration ou d’une politique de sauvegarde, il est possible de mettre en place une réplication mysql.

Nous allons voir ensemble comment mettre en place une réplication de type master / slave sur des distribution de type debian / ubuntu.

Il est possible de jouer la réplication sur autant de serveur slaves que souhaités.

Cette procédure nécessitera des redémarages de mysql

 

Préparation du serveur master.

Pour commencer il est nécessaire de créer un utilisateur mysql :

Pour plus de sécurité nous restreindrons l’accès à une ip particulière via la commande suivante a éxécuter avec un utilisateur ayant tous les droits.

CREATE USER 'my-replication-user'@'hostname-de-votre-serveur' IDENTIFIED BY 'some_pass';

Il faut ensuite ajouter à cet utilisateur les droits de réplication :

GRANT REPLICATION SLAVE ON *.* TO 'my-replication-user'@'hostname-de-votre-serveur';

Il faudra ensuite activer la conservation des fichiers de logs sur le serveur.
Pour cela il faut rajouter la configuration suivante dans le fichier /etc/mysql/my.cnf

[mysqld]
log-bin=mysql-bin
server-id=1
expire_logs_days=2

Nous conserverons les logs binaires uniquement 2 jours

Il faut également autoriser les connexion à mysql depuis l’extérieur si ce n’est pas encore le cas
Vous pouvez le visualiser via la commande suivante :

netstat -lpn | grep mysql

Il faut bien s’assurer que le serveur écoute sur 0.0.0.0

NetStat mysql

Si ce n’est pas le cas, il faut changer la valeur du paramètre bind-address dans le fichier /etc/mysql/my.cnf

bind-address = 0.0.0.0

Redémarer ensuite mysql pour prendre en compte le changement de configuration

sudo service mysql restart

Il faut ensuite faire un dump de la base de données à répliquer via la commande suivante :

mysqldump -u root -p dbname --single-transaction --master-data=1 | gzip > dump-replication.sql.gz

 

Préparation du serveur slave :

Dans le fichier /etc/mysql/my.cnf rajouter un serveur id différente de celui de prod

server-id=2

Il faut ensuite créer votre base de données sur le serveur slave.
Et importer le dump précédent.

zcat dump-replication.sql.gz | mysql -u root -p dbname

Connectez vous ensuite à mysql
Exécuter ensuite la commande suivante pour configurer les information de la réplication

CHANGE MASTER TO MASTER_HOST='master-host-name-or-ip', MASTER_USER='replication-user', MASTER_PASSWORD='mypassword';

Puis de démarrer la réplication via la commande :

Start slave;

Vous pouvez ensuite voir si la réplication à démarré via la commande mysql suivante :

SHOW PROCESSLIST;

mysql show slave status

Vous pouvez voir le statut de la synchronisation via la commande

SHOW SLAVE STATUS;

Le statut de la colonne Slave_IO_State doit être à “Waiting for master to send event”
Vous pouvez également voir la colonne “Seconds_behind_master” qui devra être à 0 une fois que tout sera synchronisé.

Et voila la réplication est en place 🙂