Dans cette article nous allons voir comment mettre en place un service MySQL de réplication de base de données de type Maitre-Esclave. Le but de ce type d’architecture étant de pouvoir sauvegarder, sur un second serveur de base de données, toutes les données que nous ajoutons sur un serveur MySQL pour éviter les pertes en cas de problème.

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

  • Le serveur MySQL1 (maître)  : 192.168.0.21 / 255.255.255.0
  • Le serveur MySQL2 (esclave)  : 192.168.0.22 / 255.255.255.0

Installation des paquets nécessaires :

Vous allez installer un serveur MySQL sur vos deux machines :

apt-get update 
apt-get install mysql-server

Serveur Maitre :

Connectez-vous à notre serveur 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

Ensuite éditez le fichier « /etc/mysql/my.cnf » pour permettre au serveur d’accepter les connexions entrantes :

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

Et renseignez les lignes suivantes :

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

Redémarrez MySQL afin qu’il prenne en compte les modifications.

service mysql restart

Créez l’utilisateur « repuser » qui sera dédié au serveur 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.

Faites un dump de la base données « exempledb » :

mysqldump -u root -p exempledb > exempledb.sql

Puis désactivez le mode « 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/

Serveur Esclave :

Connectez-vous sur votre serveur esclave afin d’y créer la base de données « exempledb » qui sera répliquée :

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

Importez les données du maitre grâce au dump :

mysql -u root -p exempledb < exempledb.sql

Capture2

Puis configurez votre serveur maître grâce au fichier « /etc/mysql/my.cnf » :

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

Redémarrez MySQL afin qu’il prenne en compte les modifications.

service mysql restart

Connectez-vous au serveur 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

Vérifiez que votre serveur 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 » montre que leserveur est bien configuré comme esclave.

La réplication Maitre-Esclave est opérationnel !