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

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

Laisser un commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.