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
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
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;
Vérifiez que votre serveur de réplication est bien démarré à l’aide la commande suivante :
mysql> SHOW SLAVE STATUS\G
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 !