Nous allons voir comment mettre en place un service MySQL de réplication de base de données de type Maitre-Esclave. Le but est de pouvoir sauvegarder, sur un second serveur, toutes les données que nous ajoutons sur un serveur MySQL afin de lutter contre de potentielles pertes.

Nous utiliserons ici deux serveurs distincts, l’un maitre, l’autre esclave :

  • Le serveur MySQL1 (maître) avec pour @IP : 192.168.0.21
  • Le serveur MySQL2 (esclave) avec pour @IP : 192.168.0.22

Installation des paquets nécessaires :

Nous allons commencer par installer le service MySQL sur nos deux machines :

$ apt-get update --yes
$ apt-get install mysql-server --yes

Nous utiliserons dans notre tutoriel ‘motdepasse’ comme identifiant de nos services.

Configuration du Serveur Maitre :

Passons maintenant à la configuration de notre serveur maître :

Nous nous connectons à notre service MySQL afin de créer la base de données qui sera répliquée :

$ mysql -u root -p
mysql> CREATE DATABASE exempledb;
mysql> exit

Il faut ensuite éditer le fichier /etc/mysql/my.cnf pour permettre au service d’accepter les connexions entrantes depuis l’extérieur de la machine :

$ nano /etc/mysql/my.cnf
#bind-address = 127.0.0.1

Et configurer les lignes suivantes ainsi :

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = exempledb

Nous redémarrons MySQL afin de prendre en compte nos modifications.

$ service mysql restart

Nous allons maintenant créer l’utilisateur « repuser » qui sera dédié au service de réplication des données :

$ mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'192.168.0.22' IDENTIFIED BY 'motdepasse';
mysql> FLUSH PRIVILEGES;
mysql> USE exempledb;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
mysql> exit

SHOW MASTER.PNG

Les valeurs des colonnes ‘File’ et ‘Position’ sont à garder puisqu’elles nous serons nécessaire plus tard.

Nous pouvons désormais faire un dump de la base données ‘exempledb’ :

$ mysqldump -u root -p exempledb > exempledb.sql

On peut alors désactiver le mode de lecture seule :

$ mysql -u root -p
mysql> USE exempledb; 
mysql> UNLOCK TABLES;
mysql> exit

Puis on envoie notre fichier contenant les données de notre base vers notre serveur MySQL2 qui est notre serveur esclave :

$ scp exempledb.sql root@192.168.0.22:/root/

Capture

Configuration du Serveur Esclave :

On se connecte maintenant sur notre serveur esclave afin d’y créer la base de données ‘exempledb’ qui doit être répliquée :

$ mysql -u root -p
mysql> CREATE DATABASE exempledb;
mysql> exit

Et on y importe les données du maitre grâce au fichier dump :

$ mysql -u root -p exempledb < exempledb.sql

Capture2

On configure ensuite comme pour notre serveur maître le fichier /etc/mysql/my.cnf de la manière suivante :

$ nano /etc/mysql/my.cnf
#bind-address = 127.0.0.1
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = exempledb

On redémarre le service MySQL pour prendre en compte les modifications :

$ service mysql restart

On se connecte au service MySQL afin de configurer la réplication :

$ mysql -u root – p
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.21', MASTER_USER='repuser', MASTER_PASSWORD='motdepasse', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 340;
mysql> START SLAVE;

ah oui

N’oubliez pas de modifier les valeurs des colonnes ‘File’ et ‘Position’ que nous avons notés précédemment puisse qu’elles ne sont pas les mêmes en fonction des installations.

Nous pouvons ensuite vérifier que notre service de réplication est bien démarré à l’aide la commande suivante :

mysql> SHOW SLAVE STATUS\G

oui.PNG

La ligne ‘Slave_IO_State: Waiting for master to send event’ nous indique que notre serveur est bien configuré comme esclave et qu’il attend maintenant des changements du côté maitre.

Tester notre service :

Nous allons maintenant tester notre service de réplication afin d’être sûr qu’il soit fonctionnel.

Sur notre serveur maître, nous créons une nouvelle table ‘exempletable’ dans notre base de données ‘exempledb’ qui est normalement répliquée.

$ mysql -u root -p
mysql> USE exempledb;
mysql> CREATE TABLE exempletable (              
    -> ID INT NOT NULL AUTO_INCREMENT,              
    -> TEST VARCHAR(100) NOT NULL,              
    -> PRIMARY KEY (ID));

exemple

Puis on se rend sur notre serveur esclave afin de vérifier que la table ait bien été ajoutée dans la base de données :

$ mysql -u root -p
mysql> USE exempledb;
mysql> SHOW TABLES;

exemple2

La table ‘exempletable’ que nous avons créée sur notre serveur maitre a été ajoutée automatiquement dans la base de données ‘exempledb’ de notre serveur esclave. Notre service est donc fonctionnel.

Source : https://maximepiazzola.wordpress.com/2017/12/07/replication-de-base-donnee-maitre-esclave-mysql-sur-debian/