Le concept de réplication de base de données garantit que les données sont copiées sur plusieurs serveurs à partir d'un serveur maître. Cela assure la redondance des données et garantit que les données ne sont pas perdues en cas de défaillance du nœud maître. Dans cet article, nous examinons la réplication maître-esclave MariaDB sur CentOS 7. Nous allons montrer comment les données peuvent être copiées d'une base de données située sur un nœud maître vers une autre base de données située sur un système esclave.
Scénario de réplication maître-esclave MariaDB
Voici la configuration de la réplication :
Master node (CentOS 7 64 bit) : IP 173.82.2.236
Slave node: (CentOS 7 64 bit) : IP 173.82.94.57
Étape 1 :Installez MariaDB sur les nœuds maître et esclave
Pour commencer, connectez-vous aux nœuds maître et esclave et exécutez les commandes suivantes pour installer le serveur MariaDB
yum install mariadb-server mariadb
Exemple de sortie
Démarrez le service MariaDB et activez-le au démarrage
# systemctl start mariadb
# systemctl enable mariadb
Exemple de sortie
Étape 2 :Définissez le mot de passe MariaDB sur le maître et l'esclave
Par défaut, le mot de passe pour MariaDB/MySQL est généralement vide et les utilisateurs non autorisés peuvent accéder à la base de données. Nous devons le sécuriser en configurant un mot de passe et en le renforçant avec quelques autres paramètres. Pour ce faire, exécutez la commande ci-dessous sur le nœud maître et le nœud esclave
mysql_secure_installation
Exemple de sortie
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y ## Enter Y and press Enter
New password: ## Enter new password
Re-enter new password: ## Enter password again
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y ## Enter Y and press Enter
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y ## Enter Y and press Enter
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y ## Enter Y and press Enter
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y ## Enter Y and press Enter
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Étape 3 :Configuration du nœud maître
Maintenant que nous avons renforcé nos instances MariaDB sur les deux nœuds, configurons le nœud maître.
Tout d'abord, nous devons autoriser le port 3306 de MariaDB à travers le pare-feu CentOS 7. Pour ce faire, exécutez les commandes
# firewall-cmd --add-port=3306/tcp --zone=public --permanent
Exemple de sortie
Le rechargement du pare-feu pour effectuer les modifications
# firewall-cmd --relaod
Exemple de sortie
Ensuite, apportez quelques modifications au /etc/my.cnf
fichier
vim /etc/my.cnf
ajoutez les lignes suivantes dans le [mysqld] rubrique
[mysqld]
server_id=1
log-basename=master
log-bin
binlog-format=row
binlog-do-db=replica_db
[...]
Ici, replica_db est la base de données que nous allons créer et la répliquer sur l'esclave.
Ensuite, redémarrez le service MariaDB à l'aide de la commande :
systemctl restart mariadb
Nous allons maintenant nous connecter à MariaDB en tant qu'utilisateur root :
mysql -u root -p
La prochaine étape consistera à créer la replica_db base de données
MariaDB [(none)]> CREATE DATABASE replica_db;
Ensuite, créez un utilisateur et un mot de passe esclave. Par exemple, nous utiliserons slave_user comme nom d'utilisateur esclave et P@ssword100 comme mot de passe :
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'P@ssword100';
Query OK, 0 rows affected (0.00 sec)
Ensuite, supprimez les privilèges comme indiqué
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
Ensuite, exécutez la commande ci-dessous pour afficher l'état du maître
SHOW MASTER STATUS;
Étape 4 :Sauvegarder la base de données sur le serveur maître et la transférer sur l'esclave
Ensuite, exécutez la commande ci-dessous pour sauvegarder toutes les bases de données maîtres
# mysqldump --all-databases --user=root --password --master-data > masterdatabase.sql
Cela crée un fichier appelé masterdatabase.sql dans votre répertoire de travail actuel.
Connectez-vous à nouveau à MySQL en tant qu'utilisateur root :
mysql -u root -p
Et déverrouillez les tables :
MariaDB [(none)]> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> quit
Bye
Copiez maintenant le fichier masterdatabase.sql fichier sur votre serveur esclave.
La commande sera donc :
scp masterdatabase.sql [email protected]:/home
N'oubliez pas que 173.82.94.57 est notre serveur esclave MariaDB.
Étape 4 :Configuration de l'esclave MariaDB
Il est maintenant temps de configurer le nœud MariaDB Slave
Editez le fichier /etc/my.cnf
fichier
vim /etc/my.cnf
Ajoutez les entrées suivantes sous [mysqld] section comme indiqué
[mysqld]
server-id = 2
replicate-do-db=replica_db
[...]
Ici, replica_db est la base de données créée sur le nœud du serveur maître. Veillez également à utiliser un ID de serveur différent pour les serveurs maître et esclave. Dans ce cas, l'identifiant du serveur est 2
Enregistrez et quittez le fichier.
Ensuite, nous allons importer la base de données maître comme indiqué
mysql -u root -p < /home/masterdatabase.sql
Gardez à l'esprit que nous avions déjà copié le fichier masterdatabase.sql du serveur maître vers le répertoire /home/ du serveur esclave.
Redémarrez le service MariaDB pour appliquer les modifications.
systemctl restart mariadb
Connectez-vous maintenant à MariaDB en tant qu'utilisateur root
mysql -u root -p
Arrêtez l'esclave. Indiquez à l'esclave où trouver le fichier journal maître et démarrez l'esclave.
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='173.82.2.236', MASTER_USER='slave_user', MASTER_PASSWORD='P@ssword100', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=473;
Query OK, 0 rows affected (0.03 sec)
MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)
Ensuite, exécutez la commande ci-dessous pour afficher l'état de l'esclave
MariaDB [(none)]> SHOW SLAVE STATUS\G;
Tester la réplication MariaDB
Côté maître :
Rendez-vous sur votre serveur maître MariaDB et connectez-vous à l'instance MariaDB à l'aide de la commande indiquée
mysql -u root -p
Créer la base de données replica_db
Créez ensuite une table Persons
Ajouter un enregistrement comme indiqué
Enfin, Affichez le tableau
Côté esclave :
Maintenant, connectez-vous à l'instance de base de données MariaDB sur le serveur esclave
mysql -u root -p
Ensuite, affichez les bases de données à l'aide de la commande ci-dessous
SHOW DATABASES;
Comme vous pouvez le voir, le replica_db la base de données est présente, ce qui implique qu'elle a été répliquée !
Continuons et sondons à l'intérieur de la base de données et vérifions si des tables sont présentes. Exécuter
use replica_db;
Alors
show tables;
Comme vous pouvez le voir, le tableau Personnes créé précédemment dans le nœud maître est présent. Parfait !
Révélons ses enregistrements pour être sûr que notre base de données a été entièrement répliquée
select *from replica_db;
Comme observé, tous les contenus ont été reproduits et sont exacts. Bravo !
Dans cet article, vous avez appris comment configurer la réplication maître-esclave MariaDB sur CentOS 7. Essayez-le et n'hésitez pas à donner votre avis.