Plan du site  
pixel
pixel

Articles - Étudiants SUPINFO

Réplication Maître-Esclave sous MariaDB.

Par Guillaume DI FRANCESCO Publié le 04/01/2017 à 17:43:33 Noter cet article:
(0 votes)
Avis favorable du comité de lecture

Dans des sociétés de plus en plus informatisées, la sauvegarde de l'intégrité des données est une nécessité. En effet, ces dernières se doivent d'être accessible à tout moment et résister aux pannes occasionnelles.

En ce sens, l'une des solutions les plus simples à mettre en place est celle d'une réplication de base de données maître-esclave entre deux serveurs. Nous allons donc disposer d'un serveur maître, hébergeant nos bases de données, et d'un serveur esclave, servant uniquement à la réplication de ces dernières; chaque modification apportée sur le serveur maître étant répliquée automatiquement sur le serveur esclave.

Pour cet article, considérons deux machines sous Debian 8 :

  • mysql01 sera notre serveur maître et disposera d'une adresse IP en 192.168.1.10.

  • mysql02 sera notre serveur esclave et disposera d'une adresse IP en 192.168.1.20.

Installation de base des serveurs.

Commençons par l'installation de base de nos serveurs. Ces manipulations sont à effectuer sur les deux serveurs.

  • Mise à jour des serveurs.

    [email protected]:~# apt-get update && apt-get upgrade

  • Installation de MariaDB, permettant d'heberger nos bases de données.

    [email protected]:~# apt-get install mariadb-server

  • Définition du mot de passe root. Lors de l'installation de MariaDB via apt-get, nous devons définir le mot de passe principal de nos bases de données.

  • Personnalisation et sécurisation de la base de données MariaDB. Lors de cette étape, nous allons devoir entre un mot de passe root d'accès aux bases de données. Celui-ci doit être d'une complexité elevée pour éviter les failles de sécurité.

    [email protected]:~# mysql_secure_installation
    
    ###Entrez votre mot de passe root défini pendant l'installation de MariaDB.
    Enter current password for root (enter for none):
    
    ###Changement du mot de passe root, optionnel.
    Change the root password [Y/n] 
    
    ###Suppression des comptes anonymes. Obligatoire pour raison de sécurité.
    Remove anonymous users? [Y/n]
    
    ###Refuser la connexion via le compte root. Obligatoire pour raison de sécurité.
    Disallow root login remotely? [Y/n]
    
    ###Supprimer la base de données de test. Obligatoire pour raison de sécurité.
    Remove test database and access to it? [Y/n]
    
    ###Recharger les privileges. Obligatoire pour appliquer les changements précédents.
    Reload privilege tables now? [Y/n]

Ainsi, nos serveurs sont installés, nous pouvons passer à la configuration particulière de chacun des deux serveurs.

Configuration du serveur maître.

Le scénario est le suivant. Nous avons maintenant nos deux serveurs de base de données fonctionnels. Nous allons désormais créer une base de données et configurer la réplication. de celle-ci sur le serveur esclave.

Connectons-nous à notre instance de base de données et créons une base de données "test".

[email protected]:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 33
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE test; 
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE TABLE test (
    -> id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> name VARCHAR(40) NOT NULL
    -> );

Notre base de données étant maintenant créé, nous allons maintenant configurer la réplication de celle-ci.

Modifions le fichier my.cnf situé dans le répertoire /etc/mysql/.

[email protected]:~# nano /etc/mysql/my.cnf

[mysqld]
###ID du serveur. Dans notre cas, étant un serveur maître, il portera l'id 1. 
server-id = 1

###Nom de la base de données à répliquer. 
replicate-do-db = test

###Addresse du serveur esclave pour la réplication. 
bind-address=192.168.1.20

Redémarrons le service MariaDB pour appliquer les changements effectués précédemment.

[email protected]:~# systemctl restart mysql

Allons maintenant créer notre utilisateur qui va nous servir à gérer la réplication. Pour cela, comme précédemment, connectons nous à notre instance de base de données via la commande mysql.

[email protected]:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 33
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

###Creation de l'utilisateur mysql2 servant à la réplication.
MariaDB [(none)]> CREATE USER 'mysql2'@'localhost' IDENTIFIED BY 'Supinf0';

###On attribue les droits de réplication à notre utilisateur. 
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO mysql2 IDENTIFIED BY 'Supinf0' WITH GRANT OPTION;

###Flush des privilèges et des tables. 
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;

###Commande servant a vérifier la bonne santé de notre master. 
MariaDB [(none)]> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 |      447 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Maintenant, nous allons effectuer un dump de notre base de données de test et l'envoyer sur notre serveur esclave

[email protected]:~# mysqldump -u root -p test > /var/tmp/test-dump.sql
[email protected]:~# scp test-dump.sql [email protected]:/var/tmp/test-dump.sql

Nous pouvons désormais passer à la configuration de notre serveur esclave.

Configuration du serveur esclave.

Commençons, d'abord, par créer notre base de données de test dans notre serveur esclave, ensuite, créer notre utilisateur servant à la réplication et, enfin, importer notre base de données.

[email protected]:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

###Création de la base de données test.
MariaDB [(none)]> CREATE DATABASE test;

###Vérification de la présence de celle-ci. 
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test             |
+--------------------+
8 rows in set (0.00 sec)

###Création de l'utilisateur.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON test TO 'mysql2'@'localhost' WITH GRANT OPTION;

MariaDB [(none)]> exit;
###Import de la base de données provenant du serveur maître. 
[email protected]:~# mysql -u root -p test < /var/tmp/test-dump.sql

Modifions le fichier my.cnf de la même manière que sur le serveur maître et redémarrons le service de MariaDB.

[email protected]:~# nano /etc/mysql/my.cnf

###Modification du numéro de serveur. 
server-id=2

###Nom de la base de données à répliquer.
replicate-do-db=test

[email protected]:~# systemctl restart mysql

Il convient désormais de configurer le service de réplication de MariaDB.

[email protected]:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 7
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

###Configuration du Master. 
###Ne pas oublier de renseigner la ligne MASTER_LOG_POS en accord avec le résultat de la commande SHOW MASTER STATUS 
###effectué sur le serveur maître précédemment
MariaDB [(none)]>CHANGE MASTER TO
MASTER_HOST='192.168.1.10',
MASTER_USER='mysql2',
MASTER_PASSWORD='Supinf0',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=447,
MASTER_CONNECT_RETRY=10,
MASTER_USE_GTID=current_pos;

###Démarrage de la réplication. 
MariaDB [(none)]>START SLAVE;

###Vérification du statut de l'esclave
MariaDB [(none)]>SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State:
                  Master_Host: 192.168.1.10
                  Master_User: mysql2
                  Master_Port: 3306
                Connect_Retry: 10
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 447
               Relay_Log_File: mysqld-relay-bin.000007
                Relay_Log_Pos: 67374271
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: No
            Slave_SQL_Running: No
              Replicate_Do_DB: test
          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: 67373984
              Relay_Log_Space: 0
              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: NULL
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: 0
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: Current_Pos
                  Gtid_IO_Pos:
1 row in set (0.00 sec)

Désormais, notre système de réplication est opérationnel. Pour le tester, insérons des données dans notre table "test" et vérifions que celles-ci sont bien disponibles sur notre serveur esclave.

[email protected]:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 34
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

###On utilise la base de données test. 
MariaDB [(none)]> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

#On ajoute un nom "final_test" dans notre base de données. 
MariaDB [test]> INSERT INTO test (name) VALUES ('final_test');
Query OK, 1 row affected (0.00 sec)

Vérifions sur notre serveur esclave.

[email protected]:~# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 34
Server version: 10.0.28-MariaDB-0+deb8u1 (Debian)

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

###On utilise la base de données test. 
MariaDB [(none)]> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

###Verification de la présence dans notre table test. 
MariaDB [test]> SELECT * from test;
+----+------------+
| id | name       |
+----+------------+
|  1 | final_test |
+----+------------+
1 row in set (0.00 sec)

Nous avons donc récupéré notre nouvelle insertion ; la réplication est désormais fonctionelle.

Par cet article, nous avons donc présenté une réplication basique maître-esclave entre deux serveurs Debian 8 basé sous MariaDB.

A propos de SUPINFO | Contacts & adresses | Enseigner à SUPINFO | Presse | Conditions d'utilisation & Copyright | Respect de la vie privée | Investir
Logo de la société Cisco, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société IBM, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sun-Oracle, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Apple, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Sybase, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Novell, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Intel, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Accenture, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société SAP, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Prometric, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo de la société Toeic, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management Logo du IT Academy Program par Microsoft, partenaire pédagogique de SUPINFO, la Grande École de l'informatique, du numérique et du management

SUPINFO International University
Ecole d'Informatique - IT School
École Supérieure d'Informatique de Paris, leader en France
La Grande Ecole de l'informatique, du numérique et du management
Fondée en 1965, reconnue par l'État. Titre Bac+5 certifié au niveau I.
SUPINFO International University is globally operated by EDUCINVEST Belgium - Avenue Louise, 534 - 1050 Brussels