Recherche de site Web

Comment configurer la réplication MariaDB (maître-esclave) dans CentOS/RHEL 7 et Debian 8/9


Même lorsque certains informaticiens entendent l'expression « Réplication de base de données », ils l'associent souvent à la nécessité de disposer de plusieurs copies des mêmes informations pour éviter la perte de données en cas de panne matérielle ou de corruption des données. Bien que cela soit vrai dans une certaine mesure, la réplication de bases de données va bien au-delà du concept commun de sauvegarde d’une base de données et de la disponibilité des données.

Parmi les autres avantages de la réplication de bases de données dans une configuration maître-esclave, nous pouvons citer :

  1. Les sauvegardes peuvent être effectuées sur le serveur esclave sans affecter (et être affectées par) les opérations d'écriture dans le maître.
  2. Les opérations gourmandes en ressources (telles que l'analyse des données) peuvent être effectuées sur l'esclave sans influencer les performances du maître.

Dans cet article, nous expliquerons comment configurer la réplication maître-esclave dans MariaDB 10.1. Contrairement à la réplication classique, MariaDB a introduit le concept de Global Transaction IDs (GTID) dans la v10.0, qui permet de changer un esclave en connectez-vous et répliquez facilement à partir d’un autre maître. De plus, l'état de l'esclave est enregistré de manière sécurisée (les mises à jour de l'état sont effectuées dans la même transaction que les mises à jour des données).

Si vous recherchez une réplication MySQL sous CentOS/RHEL 6, suivez ce guide Configurer la réplication MySQL (maître-esclave) sur CentOS/RHEL 6

Installation de MariaDB 10.1 dans CentOS/RHEL 7 et Debian 8/9

Notre environnement de test se compose des machines suivantes (les deux sont CentOS 7) :

Master: 192.168.0.18
Slave: 192.168.0.19

Pour installer la dernière version de MariaDB, nous devrons ajouter leurs référentiels à nos serveurs. Si vous utilisez une ancienne version de MariaDB, par exemple 5.5, envisagez de passer à la dernière version 10.1 en utilisant l'article ci-dessous.

  1. Mettre à niveau MariaDB 5.5 vers MariaDB 10.1

Dans CentOS/RHEL

Créez un fichier nommé MariaDB.repo dans /etc/yum.repos.d avec le contenu suivant à la fois sur Maître et Esclave< systèmes :

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Enregistrez le fichier et installez MariaDB sur les deux serveurs en utilisant yum :

yum update && yum install MariaDB-server MariaDB-client

Sous Debian/Ubuntu

Ajoutez la clé pour authentifier les packages et le référentiel MariaDB :

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Remarque : remplacez le nom et le nom de code de la distribution dans la ligne en surbrillance ci-dessus.

Installez à l'aide de la commande apt-get :

apt-get update
apt-get install mariadb-server

Une fois que vous avez installé MariaDB, exécutez la procédure mysql_secure_installation sur le maître et l'esclave, configurons un exemple de base de données de test sur la machine maître.

Configuration d'un exemple de base de données MySQL sur Master

Nous allons maintenant configurer dans le serveur maître la base de données Employés de https://github.com/datacharmer/test_db (qui fournit un ensemble de données de 4 millions d'enregistrements répartis sur six tables) en deux étapes simples :

Clonez le référentiel et utilisez-le pour importer l'exemple de base de données dans votre installation MariaDB :

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Configuration du serveur MySQL sur le maître

Pour configurer le maître, suivez ces étapes :

ÉTAPE 1 : Modifiez le fichier /etc/my.cnf. Sous la section [mysqld], ajoutez les quatre lignes suivantes :

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

et redémarrez MariaDB :

systemctl restart mariadb

ÉTAPE 2 : Connectez-vous au serveur MariaDB en tant que root, créez l'utilisateur esclave et attribuez les autorisations nécessaires :

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

La dernière commande (SHOW MASTER STATUS) renvoie la position actuelle dans le journal binaire (les coordonnées exactes qui indiquent exactement à quel point l'esclave doit commencer la réplication :

ÉTAPE 3 : Quittez l'invite MariaDB (avec exit;) et utilisez la commande suivante pour prendre un instantané de la base de données des employés. Lorsque vous appuyez sur Entrée, vous serez invité à saisir le mot de passe root que vous avez configuré précédemment via mysql_secure_installation :

mysqldump -u root -p employees > employees-dump.sql

Une fois le vidage terminé, connectez-vous à nouveau au serveur de base de données pour déverrouiller les tables, puis quittez :

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

ÉTAPE 4 : Copiez le dump sur l'esclave :

scp employees-dump.sql [email :/root/ 

ÉTAPE 5 : Exécutez la procédure mysql_upgrade pour mettre à niveau les tables système (vous serez invité à saisir le mot de passe root MariaDB) :

mysql_upgrade -u root -p

ÉTAPE 6 : Autorisez le service de base de données via le pare-feu :

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Configurons maintenant l'esclave.

Configuration du serveur MySQL sur l'esclave

Pour configurer l'esclave, suivez ces étapes :

ÉTAPE 1 : Créez le compte pour effectuer les tâches de réplication. Connectez-vous au serveur MariaDB local avec :

mysql -u root –p

et entrez le mot de passe que vous avez défini précédemment.

ÉTAPE 2 : Une fois connecté au serveur de base de données, créez l'utilisateur et une base de données vide, et accordez les autorisations :

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

ÉTAPE 3 : Quittez l'invite MariaDB et chargez le dump créé sur le serveur maître :

mysql -u root -p employees < employees-dump.sql

ÉTAPE 4 : Modifiez le fichier /etc/my.cnf pour attribuer un ID de serveur à l'esclave sous le [mysqld]. Notez qu'il doit s'agir d'un entier différent de 1, car nous avons utilisé 1 dans le maître :

server_id=2
replicate-do-db=employees

Redémarrez le serveur de base de données :

systemctl restart mariadb

ÉTAPE 5 : Exécutez la procédure mysql_upgrade pour mettre à niveau les tables système (vous serez invité à saisir le mot de passe root MariaDB) :

mysql_upgrade -u root -p

ÉTAPE 6 : Une fois le dump importé sur l'esclave, il ne nous reste plus que quelques étapes pour commencer la réplication. Connectez-vous à la base de données et exécutez les commandes suivantes dans l'invite MariaDB. Portez une attention particulière aux variables MASTER_LOG_FILE et MASTER_LOG_POS, qui doivent correspondre aux valeurs renvoyées par SHOW MASTER STATUS à l'ÉTAPE 2 de « Configuration du maître ». au-dessus de.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

ÉTAPE 7 : Démarrez l'esclave et vérifiez son état sans quitter l'invite MariaDB :

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Non pas que vous en ayez besoin maintenant, mais notez que vous pouvez arrêter l'esclave avec :

MariaDB [(none)]> STOP SLAVE;

si la commande SHOW SLAVE STATUS\G; renvoie des erreurs. Utilisez ces erreurs pour dépanner, puis exécutez START SLAVE; pour tester à nouveau.

Tester la réplication de la base de données MySQL/MariaDB

Ajoutons un enregistrement à la table employés du serveur maître :

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Vérifiez ensuite que cette modification a été répliquée dans l'esclave :

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Comme vous pouvez le constater, la réplication fonctionne correctement du maître vers l'esclave.

Résumé

Dans cet article, nous avons expliqué comment installer la dernière version de MariaDB dans CentOS/RHEL 7 et Debian 8/9, et expliqué comment configurer la réplication maître-esclave avec les GTID. Pour plus d'informations, vous pouvez vous référer au Guide de réplication MariaDB, et n'hésitez pas à nous contacter en utilisant le formulaire ci-dessous si vous avez des questions ou des commentaires.