Réplication Mysql sous Centos 7 (Mariadb)

Dans la continuité de l’article sur la synchronisation de fichiers entre 2 serveurs, nous allons voir dans cet article comment synchroniser la base de données (qui ne peut se faire en synchronisant simplement /var/lib/mysql).

Nous allons utiliser une fonctionnalité qui permet justement la réplication entre un serveur Mysql maître et un serveur Mysql Esclave.

  • Serveur Maître : XXX.XXX.XXX.1
  • Serveur Esclave : XXX.XXX.XXX.2
  • Base à répliquer : ma_base_a_repliquer
  • Utilisateur de réplication : user_sync
  • Mot de passe de user_sync : MOT_DE_PASSE

En prérequis je dirai qu’il faut que le port 3306 soit ouvert pour que les 2 serveurs Mysql puissent communiquer.

Je pars du principe que vous avez 2 serveurs vierges (ou au moins l’esclave).

1/ Configuration du serveur maître

a/ configuration système

Editer le fichier /etc/my.cnf
[mysqld]
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=ma_base_a_repliquer
[...]
Puis redémarrer Mysql
systemctl restart mariadb

b/ Configuration SQL

Ensuite vous devez créer un compte SQL (user_sync) qui sera utilisé pour la réplication.

Se connecter à Mysql en root
mysql -u root -p
Donner les droits de réplication à user_sync
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'user_sync'@'%' IDENTIFIED BY 'MOT_DE_PASSE';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
Afficher les informations de réplication
MariaDB [(none)]> SHOW MASTER STATUS;
+--------------------+----------+---------------------+------------------+
| File               | Position | Binlog_Do_DB        | Binlog_Ignore_DB |
+--------------------+----------+---------------------+------------------+
| mariadb-bin.000001 |      472 | ma_base_a_repliquer |                  |
+--------------------+----------+---------------------+------------------+
1 row in set (0.00 sec)

Ces dernières informations vont être utiles pour configurer l’esclave et lui dire où en est la synchronisation.

Ensuite nous allons créer un dump intégral à importer sur l’esclave :

Dump intégral de la base
mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql
Transfert du dump sur le serveur esclave
scp masterdatabase.sql root@XXX.XXX.XXX.2

2/ Configuration du serveur esclave

a/ Configuration système

Nous configurons ce serveur en esclave (ID 2) et lui indiquons la base qui sera répliquée (ma_base_a_repliquer)

On édite le fichier /etc/my.cnf
[mysqld]
server-id = 2
replicate-do-db=ma_base_a_repliquer
[...]
Nous importons le dump du serveur maître
mysql -u root -p < /home/masterdatabase.sql 
Redémarrage Mysql
systemctl restart mariadb

b/ Configuration SQL

Connexion Mysql en root
mysql -u root -p

C’est ici qu’il faudra utiliser les informations du maître relevées plus haut (nom du fichier et position)

Configuration de l'esclave Mysql
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='XXX.XXX.XXX.1', MASTER_USER='user_sync', MASTER_PASSWORD='MOT_DE_PASSE', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=472;
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]> SLAVE START;
Query OK, 0 rows affected (0.01 sec)

Voilà c’est aussi simple que ça. Si tout ce passe bien un SHOW SLAVE STATUS \G; devrait vous afficher les informations de réplication et vous devriez voir le numéro de position évoluer au fil des modifications sur le serveur maître.

Sinon il y a aussi...