Réplication de données avec mysql

Voici le résultat d’un projet tout simple à mettre en place …

Le principe est simple ! Lorsque que notre base de données est modifié, les données sont reproduites sur un deuxième serveur de manière automatique.

Pour cela imaginons tout d’abord qu’une base de données soit en exploitation sur un serveur.

Ce dit « serveur » sera appelé serveur maitre.
Notre base de données sera répliqué sur un second serveur appellé serveur esclave.

Voici les étapes pour mettre en place cette réplication :

  • Configuration du serveur maître :

Création d’un utilisateur Mysql pour que le serveur esclave puisse accéder à la base de notre serveur maitre.

user@master:$ mysql -u root -p
mysql -> GRANT REPLICATION SLAVE ON *.* TO rep_slave@192.168.1.100 IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql -> FLUSH PRIVILEGES;
mysql -> quit;

Ensuite on édite le fichier de configuration de Mysql (my.cnf dans /etc/ normalement …) avec les paramètres suivants :

server-id = 1 # à décommenter
log_bin = /var/log/mysql/mysql-bin.log # où stocker les logs binaires
binlog-do-db = entrepot # base que l'on souhaite répliquer
binlog-ignore-db =  mysql  #base que l'on ne souhaite pas répliquer</pre>

Pour prendre en compte ces modifications, le service doit être redémarré.

root@master:# /etc/init.d/mysql restart

On vérrouille les tables de la base « entrepot » en mode lecture seule pour éviter les modifications éventuelles.

user@master:$ mysql -u root -p
mysql-> USE entrepôt ;
mysql-> FLUSH TABLES WITH READ LOCK ;

Les informations du serveur maître s’affichent telles que :

mysql-> SHOW MASTER STATUS;
File          Position   Binlog_Do_DB   Binlog_Ignore_DB
mysql-bin.000012 98         entrepot       mysql

Les informations File et Position seront nécessaires à la configuration du serveur esclave.

La base entrepot du serveur maître est exportée grâce à la commande suivante :

user@master:$ mysqldump -u root -p entrepot > entrepot.sql
  • Configuration du serveur esclave :

Considérons que Mysql est installé sur le serveur esclave.

Voici les options à prendre en compte pour la configuration de ce service (dans my.cnf du serveur esclave):

server-id = 2 # numéro différent du master
#log_bin = /var/log/mysql/mysql-bin.log # à commenter

Création et importation de la base « entrepot » sur le serveur esclave.

user@slave:$ mysql -u root -p
mysql-> CREATE DATABASE entrepot;
mysql-> quit;
user@slave:$ mysql-u root -p entrepot < entrepot.sql

Redémarrage du service Mysql pour prendre en compte les modifications de configuration.

root@slave# /etc/init.d/mysql restart

Puis dans un shell Mysql :

mysql -> SLAVE STOP;
mysql -> CHANGE MASTER TO MASTER_HOST='192.168.1.50',
         MASTER_USER='rep_slave', MASTER_PASSWORD='password',
         MASTER_LOG_FILE='MySQL-bin.000012', MASTER_LOG_POS=98;
mysql ->SLAVE START;

Les tables du serveur maître doivent être déverrouillées :

mysql -> USE entrepot;
mysql ->UNLOCK TABLES;

Le fichier de journalisation permet de savoir si la connexion s’est effectuée.

root@slave:# tail -f /var/log/mysql.log

Des informations de connexion en direction de la base maître doivent apparaître, cependant aucune erreur ne doit être présente.

Voilà c’est fini !

Pour plus d’infos il vous reste la doc mysql !

documentation mysql

Built with Hugo
Theme Stack designed by Jimmy