
La réplication MySQL est un processus qui vous permet de copier automatiquement des données d'un serveur de base de données vers un ou plusieurs serveurs.
MySQL prend en charge un certain nombre de topologies de réplication, la topologie maître/esclave étant l'une des topologies les plus connues dans lesquelles un serveur de base de données agit en tant que maître, tandis qu'un ou plusieurs serveurs agissent en tant qu'esclaves. Par défaut, la réplication est asynchrone où le maître envoie des événements décrivant les modifications de la base de données à son journal binaire et les esclaves demandent les événements lorsqu'ils sont prêts.
Dans ce tutoriel, nous expliquerons comment configurer une réplication MySQL maître/esclave avec un serveur maître et un serveur esclave sur CentOS 7. Les mêmes étapes s'appliquent pour MariaDB.
Ce type de topologie de réplication est le mieux adapté au déploiement d'instances dupliquées en lecture pour la mise à l'échelle en lecture, la sauvegarde des bases de données en direct pour la reprise après sinistre et pour les tâches d'analyse.
Prérequis #
Dans cet exemple, nous supposons que vous disposez de deux serveurs exécutant CentOS 7, qui peuvent communiquer entre eux via un réseau privé. Si votre fournisseur d'hébergement ne fournit pas d'adresses IP privées, vous pouvez utiliser les adresses IP publiques et configurer votre pare-feu pour autoriser le trafic sur le port 3306 uniquement à partir de sources fiables.
Les serveurs de cet exemple ont les adresses IP suivantes :
Master IP: 192.168.121.59
Slave IP: 192.168.121.14
Installer MySQL #
Les référentiels par défaut de CentOS 7 n'incluent pas les packages MySQL, nous allons donc installer MySQL à partir de leur référentiel Yum officiel. Pour éviter tout problème, nous installerons la même version MySQL 5.7 sur les deux serveurs.
Installez MySQL sur les serveurs maître et esclave :
sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install mysql-community-server
Une fois l'installation terminée, démarrez le service MySQL et activez-le pour qu'il démarre automatiquement au démarrage avec :
sudo systemctl enable mysqld
sudo systemctl start mysqld
Lorsque le serveur MySQL démarre pour la première fois, un mot de passe temporaire est généré pour l'utilisateur racine MySQL. Pour trouver le mot de passe, utilisez la commande grep suivante :
sudo grep 'temporary password' /var/log/mysqld.log
Exécutez le mysql_secure_installation
commande pour définir votre nouveau mot de passe root et améliorer la sécurité de l'instance MySQL :
mysql_secure_installation
Entrez le mot de passe root temporaire et répondez Y
(oui) à toutes les questions.
Configurer le serveur maître #
Tout d'abord, nous allons configurer le serveur MySQL maître et apporter les modifications suivantes :
- Configurez le serveur MySQL pour qu'il écoute sur l'adresse IP privée.
- Définissez un ID de serveur unique.
- Activer la journalisation binaire.
Pour ce faire, ouvrez le fichier de configuration MySQL et ajoutez les lignes suivantes dans le [mysqld]
rubrique :
sudo nano /etc/my.cnf
maître :/etc/my.cnfbind-address = 192.168.121.59
server-id = 1
log_bin = mysql-bin
Une fois cela fait, redémarrez le service MySQL pour que les modifications prennent effet
sudo systemctl restart mysqld
L'étape suivante consiste à créer un nouvel utilisateur de réplication. Connectez-vous au serveur MySQL en tant qu'utilisateur root :
mysql -uroot -p
Depuis l'invite MySQL, exécutez les requêtes SQL suivantes qui créeront le replica
utilisateur et accordez l'REPLICATION SLAVE
privilège à l'utilisateur :
CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';
Assurez-vous de changer l'adresse IP avec votre adresse IP esclave. Vous pouvez nommer l'utilisateur comme vous le souhaitez. Toujours dans l'invite MySQL, exécutez la commande suivante qui imprimera le nom et la position du fichier binaire.
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 1427
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
Prenez note du nom du fichier, ‘mysql-bin.000001’ et Position ‘1427’ . Vous aurez besoin de ces valeurs lors de la configuration du serveur esclave. Ces valeurs seront probablement différentes sur votre serveur.
Configurer le serveur esclave #
Comme pour le serveur maître ci-dessus, nous apporterons les modifications suivantes au serveur esclave :
- Configurer le serveur MySQL pour qu'il écoute sur l'adresse IP privée
- Définissez un ID de serveur unique
- Activer la journalisation binaire
Ouvrez le fichier de configuration MySQL et modifiez les lignes suivantes :
sudo nano /etc/my.cnf
esclave :/etc/my.cnfbind-address = 192.168.121.14
server-id = 2
log_bin = mysql-bin
Redémarrez le service MySQL :
sudo systemctl restart mysqld
L'étape suivante consiste à configurer les paramètres que le serveur esclave utilisera pour se connecter au serveur maître. Connectez-vous au shell MySQL :
mysql -uroot -p
Tout d'abord, arrêtez les threads esclaves :
STOP SLAVE;
Exécutez la requête suivante qui configurera l'esclave pour répliquer le maître :
CHANGE MASTER TO
MASTER_HOST='192.168.121.59',
MASTER_USER='replica',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1427;
Assurez-vous que vous utilisez l'adresse IP, le nom d'utilisateur et le mot de passe corrects. Le nom et la position du fichier journal doivent être identiques aux valeurs que vous avez obtenues du serveur maître.
Une fois cela fait, démarrez les threads esclaves.
START SLAVE;
Tester la configuration #
À ce stade, vous devriez avoir une configuration de réplication maître/esclave fonctionnelle.
Pour vérifier que tout fonctionne comme prévu, nous allons créer une nouvelle base de données sur le serveur maître :
mysql -uroot -p
CREATE DATABASE replicatest;
Connectez-vous au shell MySQL esclave :
mysql -uroot -p
Exécutez la commande suivante pour répertorier toutes les bases de données :
SHOW DATABASES;
Vous remarquerez que la base de données que vous avez créée sur le serveur maître est répliquée sur l'esclave :
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replicatest |
| sys |
+--------------------+
5 rows in set (0.00 sec)