Bonjour à tous,
Dans ce tuto nous allons voir comment mettre en place une replication master-slave avec MySQL sous Debian 8.
Je vais donc utiliser deux serveur
- mysql-node1 (Master) => 192.168.2.11
- mysql-node2 (Slave) => 192.168.2.12
Le but sera de repliquer sur mysql-node2 la base de donnée « replication »
Commençons par le début.
Installation de MySQL
Sur les deux serveurs faire:
apt-get update && apt-get dist-upgrade apt-get install mysql-server
Durant l’installation fournissez le mot de passe pour l’utilisateur « root »de MySQL.
Configuration de mysql-node1
Connectez-vous à la console de MySQL pour créer la base de données que vous souhaitez répliquer.
root@mysql-node1:~# mysql -u root -p CREATE DATABASE replication; Query OK, 1 row affected (0.00 sec) exit Bye
Pour configurer la réplication, éditez le fichier /etc/mysql/my.cnf sur le serveur mysql-node1
Configurez ces entrées conne ceci:
bind-address = ip_de_votre_serveur server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = replication #Nom de la BDD a repliquer
Et redémarrez MySQL
root@mysql-node1:~# service mysql restart
Une fois MySQL redémarré tapez la commande suivante dans la console de MySQL afin de créer un utilisateur dédié à la replication
root@mysql-node1:~# mysql -u root -p GRANT REPLICATION SLAVE ON *.* TO 'repuser'@'IP_SERVEUR_SLAVE' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; #On met la base de donnée a repliquer en lecture seule USE replication; FLUSH TABLES WITH READ LOCK; HOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 340 | replication | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
Notez bien la valeur de File et Position, cela va nous servir plus tard.
Faites un dump de la base de donnée
root@mysql-node1:~# mysqldump -u root -p replication > replication.sql
Une fois le dump fait on enlève le mode lecture seule.
root@mysql-node1:~# mysql -u root -p use replication; Database changed UNLOCK TABLES; Query OK, 0 rows affected (0.00 sec)
On envoie maintenant le fichier sur le serveur mysql-node2
root@mysql-node1:~# scp replication.sql root@mysql-node2:/root/
On se connecte maintenant sur mysql-node2
On créer sur celui-ci la base de donnée
root@mysql-node2:~# mysql -u root -p CREATE DATABASE replication; Query OK, 1 row affected (0.00 sec) exit Bye
On importe le dump
root@mysql-node2:~# mysql -u root -p replication < replication.sql
Comme sur le premier serveur on édite le fichier /etc/mysql/my.cnf
Configurez les valueurs suivantes: server-id = 2 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = replication
Et on redémarre MySQL
root@mysql-node2:~# service mysql restart
On se connecte à la console de MySQL et on tape la commande suivante pour configurer la replication:
root@mysql-node2:~# mysql -u root -p #Ne copiez pas cette ligne adaptez la à votre configuration mysql CHANGE MASTER TO MASTER_HOST='IP_MASTER_SERVEUR',MASTER_USER='repuser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 340; Query OK, 0 rows affected (0.02 sec) #Et on lance le serveur en tant que SLAVE START SLAVE;
On regarde si la replication est bien activée
SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.2.11 Master_User: repuser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 340 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 340 Relay_Log_Space: 410 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec)
Si vous avez Slave_IO_State: Waiting for master to send event cela veut dire que tout est OK
Testons la replication:
Sur le serveur mysql-node1 nous allons créer une table dans la base de données replication:
root@mysql-node1:~# mysql -u root -p use replication; Database changed mysql> CREATE TABLE replication_table ( -> ID INT NOT NULL AUTO_INCREMENT, -> TEST VARCHAR(100) NOT NULL, -> PRIMARY KEY ( ID )); Query OK, 0 rows affected (0.06 sec)
On vérifie sur mysql-node2 que la base de données a été créer
root@mysql-node2:~# mysql -u root -p
use replication; Database changed show tables; +-----------------------+ | Tables_in_replication | +-----------------------+ | replication_table | +-----------------------+ 1 row in set (0.00 sec)
Si la table est bien la tout est OK!
(4 commentaires)
2 pings
Passer au formulaire de commentaire
Excellent
Merci beaucoup
Bonjour
Merci pour cet excellent tuto.
Que faire si je perds la synchro entre master et slave ?
Imaginons que je me rende compte d’une perte de synchro aubout d’une semaine ?
Bonjour,
d’abord merci pour ce tuto qui est très complet, mais je rencontre des soucis pour le mettre en place sous freebsd, quelqu’un pour aider?
lorsque j’insère dans le fichier my.cnf la ligne:
log_bin=…
Je ne peux plus rédemarrer le service mysql.
J’ai finalement trouver d’ou venait l’erreur.
J’ai cependant une question.
Dans le cas présenté, il s’agit d’une nouvelle base. Mais est-il possible d’effectuer une réplication avec une base déjà existante?
Un serveur utilisant la base de données, ajoutant régulièrement des nouvelles données dans la base. Est-ce que la réplication pourra se faire automatiquement sur le seconde a chaque fois qu’une nouvelle données est ajouté?
[…] Replication Master-Slave avec MySQL sous Debian 8 […]
[…] http://denisrosenkranz.com/tuto-replication-master-slave-avec-mysql-sous-debian-8/ […]