GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comment configurer la réplication MariaDB sur CentOS Linux

C'est un processus de création de versions en double d'une base de données. Le processus de réplication ne consiste pas seulement à copier une base de données, mais également à synchroniser les modifications du maître vers l'un des esclaves. Mais cela ne signifie pas que les bases de données esclaves sont une copie identique du maître, car la réplication peut être configurée pour que seul un schéma de tables ou de colonnes ou de lignes soit répliqué, c'est-à-dire une réplication partielle. La réplication garantit que ces objets configurés spécifiques sont synchronisés entre les différentes bases de données.

Concepts de réplication Mariadb

Sauvegardes :La réplication peut être utilisée pour les sauvegardes de base de données. Par exemple, vous avez une réplication maître -> esclave. Si le maître est perdu (échec du disque dur, par exemple), vous pouvez restaurer votre base de données à partir du maître.

Mise à l'échelle :Vous pouvez utiliser la réplication maître -> esclave pour la mise à l'échelle de la solution. Par exemple, si vous avez quelques grosses requêtes SQL, en utilisant la réplication, vous pouvez séparer ces requêtes pour chaque nœud de réplication. L'écriture SQL doit être effectuée uniquement sur le maître, pour les requêtes en lecture seule, le serveur esclave peut être utilisé.

Solution d'épandage :Vous pouvez utiliser la réplication pour la distribution. Par exemple, vous pouvez distribuer différentes données de vente à différentes bases de données.

Solution de basculement :Par exemple, vous avez une réplication maître -> esclave(1) -> esclave(2) -> esclave(3). Vous pouvez écrire un script pour la surveillance du maître, si le maître échoue, le script peut rapidement changer l'esclave (1) nouveau pour le maître maître -> esclave (1) -> esclave (2) et votre application continuera à fonctionner sans temps d'arrêt

Démonstration schématique simple de la réplication

Avant de commencer, sachez ce qu'est le journal binaire et Ibdata1. Le journal binaire contient un enregistrement de toutes les modifications apportées à la base de données, aux données et à la structure, ainsi que la durée d'exécution de chaque instruction. Le journal de la corbeille consiste en un ensemble de fichiers journaux et un index. Cela signifie que les principales instructions SQL telles que CREATE, ALTER, INSERT, UPDATE et DELETE seront placées dans ce journal, les instructions telles que SELECT ne seront pas enregistrées. Ces informations peuvent être enregistrées dans le fichier général query.log. En simple Ibdata1 est un fichier qui contient toutes les tables et toutes les informations sur db.

Configuration du serveur maître

C'est bien d'avoir mis à jour le serveur

sudo yum install update -y && sudo yum install upgrade -y

Nous travaillons sur le serveur centos 7

sudo cat /etc/redhat-release
CentOS Linux release 7.0.1406 (Core)

Installer MariaDB

sudo yum install mariadb-server -y

Démarrez MariaDB et activez-le pour qu'il démarre au démarrage du serveur

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

Sortie :

ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'

Vérifier l'état de MariaDB

sudo service mariadb status

ou utilisez

sudo systemctl is-active mariadb.service

Sortie :

Redirecting to /bin/systemctl status  mariadb.service
mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled)

Définir le mot de passe MariaDB

mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("SOME_ROOT_PASSWORD") where User='root';
mysql> flush privileges;
mysql> exit

SOME_ROOT_PASSWORD - votre mot de passe root. Dans mon cas, j'utiliserai "q" - mot de passe, puis essayez de vous connecter :

sudo mysql -u root -pSOME_ROOT_PASSWORD

Sortie :

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 5.5.41-MariaDB MariaDB Server
Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Tapez 'aide;' ou '\h' pour obtenir de l'aide. Tapez '\c' pour effacer l'instruction d'entrée actuelle.

Créons une base de données avec une table avec des données

Créer une base de données/schéma

sudo mysql -u root -pSOME_ROOT_PASSWORD
mysql> create database test_repl;

Où :

test_repl - Name of shcema which will be replicated

Sortie :

Query OK, 1 row affected (0.00 sec)

Créer une table Personnes

mysql> use test_repl;
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

Sortie :

mysql> MariaDB [test_repl]> CREATE TABLE Persons (
-> PersonID int,
-> LastName varchar(255),
-> FirstName varchar(255),
-> Address varchar(255),
-> City varchar(255)
-> );
Query OK, 0 rows affected (0.01 sec)

Insérer des données

mysql> INSERT INTO Persons VALUES (1, "LastName1", "FirstName1", "Address1", "City1");
mysql> INSERT INTO Persons VALUES (2, "LastName2", "FirstName2", "Address2", "City2");
mysql> INSERT INTO Persons VALUES (3, "LastName3", "FirstName3", "Address3", "City3");
mysql> INSERT INTO Persons VALUES (4, "LastName4", "FirstName4", "Address4", "City4");
mysql> INSERT INTO Persons VALUES (5, "LastName5", "FirstName5", "Address5", "City5");

Sortie :

Query OK, 5 row affected (0.00 sec)

Vérifier les données

mysql> select * from Persons;

Sortie :

+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        1 | LastName1 | FirstName1 | Address1 | City1 |
|        2 | LastName2 | FirstName2 | Address2 | City2 |
|        3 | LastName3 | FirstName3 | Address3 | City3 |
|        4 | LastName4 | FirstName4 | Address4 | City4 |
|        5 | LastName5 | FirstName5 | Address5 | City5 |
+----------+-----------+------------+----------+-------+

Configurer MariaDB pour la réplication

Vous devrez modifier le fichier my.cnf sur le serveur maître pour activer la journalisation binaire et définir l'identifiant du serveur. J'utiliserai l'éditeur de texte vi, mais je peux utiliser n'importe quel éditeur de texte adapté à vos besoins, tel que nano, joe, etc.

sudo vi /etc/my.cnf 

et mettre à config dans la section [mysqld] ces lignes.


log-basename=master
log-bin
binlog-format=row
server_id=1

Sortie :

Redémarrez ensuite MariaDB :

sudo service mariadb restart

Connectez-vous à MariaDB et vérifiez les journaux binaires :

sudo mysql -u root -pq test_repl

mysql> AFFICHER LE STATUT MAÎTRE ;

Sortie :

+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 |     3913 |              |                  |
+--------------------+----------+--------------+------------------+

N'oubliez pas : Valeurs "Fichier" et "Position". VOUS AUREZ BESOIN DE CETTE VALEUR SUR LE SERVEUR ESCLAVE

Créer un utilisateur pour la réplication

mysql> GRANT REPLICATION SLAVE ON *.* TO replication_user IDENTIFIED BY 'bigs3cret' WITH GRANT OPTION;
mysql> flush privileges;

Sortie :

Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

Vérifier l'utilisateur dans la base de données

mysql> select * from mysql.user WHERE user="replication_user"\G;

Sortie :

mysql> select * from mysql.user WHERE user="replication_user"\G;
*************************** 1. row ***************************
Host: %
User: replication_user
Password: *2AF30E7AEE9BF3AF584FB19653881D2D072FA49C
Select_priv: N
.....

Créer un vidage de base de données (instantané de toutes les données qui seront répliquées) formulaire maître

mysqldump -uroot -pSOME_ROOT_PASSWORD  test_repl > full-dump.sql

Où :

SOME_ROOT_PASSWORD - password for root user that you have setup
test_repl - name of the data base which will be replicated;

Vous devez récupérer le vidage mysql (full-dump.sql) sur le serveur esclave. Il est nécessaire pour la réplication.

Configuration du serveur esclave

Toutes ces commandes que vous devez exécuter sur le serveur esclave

Supposons que nous ayons un serveur CentOS 7.x frais/mis à jour avec le dernier serveur mariaDB et que vous pouvez vous connecter en tant que root au serveur maria DB (cela a été décrit dans la première partie de l'article)

Connectez-vous à la console Maria DB et créez la base de données

mysql -u root -pSOME_ROOT_PASSWORD;
mysql> create database test_repl;
mysql> exit;

Récupérer les données du maître sur le serveur esclave

mysql -u root -pSOME_ROOT_PASSWORD test_repl < full-dump.sql

Où :

full-dump.sql - its DB Dump that you have create at test server.

Connectez-vous à Maria DB et configurez la réplication

mysql>     CHANGE MASTER TO
MASTER_HOST='82.196.5.39',
MASTER_USER='replication_user',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='mariadb-bin.000002',
MASTER_LOG_POS=3913,
MASTER_CONNECT_RETRY=10;

Où :

MASTER_HOST - IP of the master server.
MASTER_USER - replication user at master server
MASTER_PASSWORD - replication user password
MASTER_PORT - mysql port at master
MASTER_LOG_FILE - bin-log file name form master
MASTER_LOG_POS - bin-log position file at master

Démarrer le mode esclave

mysql> slave start;

Sortie :

Query OK, 0 rows affected (0.00 sec)

Vérifier l'état de l'esclave

mysql> show slave status\G;

Sortie :

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 82.196.5.39
Master_User: replication_user
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mariadb-bin.000002
Read_Master_Log_Pos: 4175
Relay_Log_File: mariadb-relay-bin.000002
Relay_Log_Pos: 793
Relay_Master_Log_File: mariadb-bin.000002
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: 4175
Relay_Log_Space: 1089
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)

À cette étape, tout devrait être ok, et aucune erreur ne devrait être ici.

Tester la réplication

Au serveur MAIN/MASTER ajouter quelques entités à DB

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> INSERT INTO Persons VALUES (6, "LastName6", "FirstName6", "Address6", "City6");
mysql> INSERT INTO Persons VALUES (7, "LastName7", "FirstName7", "Address7", "City7");
mysql> INSERT INTO Persons VALUES (8, "LastName8", "FirstName8", "Address8", "City8");

Ensuite, allez sur le serveur SLAVE et vérifiez les données répliquées

mysql -u root -pSOME_ROOT_PASSWORD test_repl
mysql> select * from Persons;
+----------+-----------+------------+----------+-------+
| PersonID | LastName  | FirstName  | Address  | City  |
+----------+-----------+------------+----------+-------+
...................
|        6 | LastName6 | FirstName6 | Address6 | City6 |
|        7 | LastName7 | FirstName7 | Address7 | City7 |
|        8 | LastName8 | FirstName8 | Address8 | City8 |
+----------+-----------+------------+----------+-------+

Vous pouvez voir que les données sont répliquées sur le serveur esclave. Cela signifie que la réplication fonctionne. J'espère que vous avez apprécié l'article. Faites-nous savoir si vous avez des questions.


Cent OS
  1. Comment configurer LVM sur Linux / CentOS / Redhat

  2. Comment configurer le référentiel YUM sous Linux/Centos/Redhat | YUM sous Linux/Centos/Redhat

  3. Comment installer et configurer docker dans Rocky Linux/Centos 8

  4. Comment installer et configurer Mono sur Rocky Linux 8 et CentOS 8

  5. Comment configurer OpenSSH sur CentOS 7

Comment installer et configurer Nextcloud sur CentOS 7 / RHEL 7

Comment installer et configurer Denyhost dans Centos 7 Linux

Comment installer et configurer Cacti sur CentOS 7

Comment configurer la réplication FreeIPA sur Rocky Linux/Alma Linux/Centos 8

Comment installer LAMP (Linux Apache, MariaDB, PHP) sur CentOS 7

Comment configurer la réplication en continu PostgreSQL 12 dans CentOS 8