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.