GNU/Linux >> Tutoriels Linux >  >> Debian

Répliquer une base de données maître à l'aide de MariaDB 10 sur Debian 8

La réplication des bases de données crée une redondance qui peut protéger contre la perte de données et optimiser les performances des applications. Ce didacticiel couvrira les bases de la réplication d'une base de données maître MariaDB 10.0 existante vers un ou plusieurs esclaves. Dans les exemples suivants, le système d'exploitation hôte est Debian 8.

Ces instructions peuvent être appliquées à d'autres systèmes d'exploitation, mais sachez que plusieurs commandes et emplacements de fichiers par défaut seront différents. Plus précisément, vous devez remplacer les noms de chemin de /etc/mysql/my.cnf , /var/lib/mysql , le nom et le chemin par défaut de votre fichier journal binaire, ainsi que les commandes pour démarrer, arrêter et redémarrer mysqld en fonction des spécificités de votre système.

1. Vérifier la connectivité

Avant de continuer, assurez-vous que le maître et l'esclave peuvent se joindre sur le réseau et que chacun a une entrée pour l'autre dans leurs /etc/hosts respectifs des dossiers. Chaque hôte doit pouvoir ping l'autre, et vous devriez pouvoir ssh de l'un à l'autre en tant qu'utilisateur normal.

2. Activer la connexion binaire mysqld sur le maître

Sur l'hôte maître, vérifiez que la journalisation binaire est activée. Invoquer mysqld avec les commutateurs --verbose --help affichera les valeurs de fonctionnement du démon MariaDB. En tant que root :

mysqld --verbose --help | grep log-bin
...
log-bin         (No default value)
...

La valeur de l'entrée log-bin définit la convention de dénomination des fichiers journaux binaires. Sur Debian, ces fichiers résident dans /var/lib . Si la valeur de log-bin est (Aucune valeur par défaut) , vous devrez activer la journalisation en modifiant le fichier de configuration my.cnf . Sur Debian, mon.cnf réside dans le répertoire /etc/mysql .

Ouvrez /etc/mysql/my.cnf dans un éditeur de texte et localisez le [mysqld] grouper. S'il n'existe pas, créez-le et entrez une ligne qui lit simplement log-bin .

[mysqld]
log-bin

L'inclusion de cette entrée activera la journalisation binaire au redémarrage de mysqld.

Vous pouvez choisir de définir une valeur pour log-bin , par exemple. log-bin=nom du fichier , pour définir un nom personnalisé pour le fichier journal binaire. Dans ce didacticiel, nous ne définirons pas de valeur et les noms de fichiers journaux par défaut seront utilisés.

Redémarrez mysqld :

service mysql restart

Vérifiez que la modification a pris effet :

mysqld --verbose --help | grep log-bin
...
log-bin         mysqld-bin
...

Comme indiqué ici, le nom du fichier journal binaire par défaut sur Debian commence par mysqld-bin , par exemple. mysqld-bin.nnnnnn .

3. Accorder des droits à un utilisateur de réplication

Il est recommandé de confier toutes les tâches de réplication à un utilisateur de réplication dédié. Dans ces exemples, nous nommerons l'utilisateur repluser et définissez le mot de passe de cet utilisateur sur la chaîne replpass .

Accordez à cet utilisateur les privilèges globaux SUPER , RECHARGER , et ESCLAVE DE RÉPLICATION . Ceux-ci permettront à l'utilisateur de réplication d'exécuter des commandes de superutilisateur, de vider les caches de la base de données et de récupérer les mises à jour à partir du serveur maître.

Entrez le client MariaDB en tant que racine de la base de données :

mysql -u root -p

À l'invite MariaDB, entrez la commande :

GRANT SUPER, RELOAD, REPLICATION SLAVE ON *.* TO 'repluser'@'%' IDENTIFIED BY 'replpass';

Ici, le joker du nom d'hôte '% ' permet à l'utilisateur de réplication de se connecter depuis n'importe quel hôte.

Vérifiez que les droits ont été accordés :

SHOW GRANTS FOR 'repluser'\G;

4. Vider les caches de la base de données et définir les tables en lecture seule

En préparation de la création d'un instantané des bases de données, videz toutes les tables et définissez-les sur READ LOCK . Cela doit être fait rapidement, pendant les heures creuses ou une période de maintenance du système.

Sur le maître :

FLUSH TABLES WITH READ LOCK;

Maintenant que les tables sont verrouillées, vérifiez le statut principal :

AFFICHER LE STATUT MAÎTRE ;

+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 |      995 |              |                  |
+-------------------+----------+--------------+------------------+

Vos informations seront différentes, mais notez les valeurs de Fichier et Position . Vous utiliserez ces informations à l'étape 7.

Quittez le client MariaDB :

\q

5. Bases de données d'instantanés pour l'hôte esclave

Créez une archive de la base de données ou des bases de données qui existent sur le maître que vous souhaitez répliquer. Chacune de ces bases de données a son propre répertoire dans /var/lib/mysql . Dans cet exemple, nous allons tarer une seule base de données, résidant sur le chemin /var/lib/mysql/dbname .

Cette commande archive une seule base de données. Si vous archivez des bases de données supplémentaires, ajoutez leurs noms de chemin complets à la commande, par ex. /var/lib/mysql/dbname1 /var/lib/mysql/dbname2 ...

tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname

Maintenant, en tant qu'utilisateur normal nom d'utilisateur , transférez ce fichier vers un compte utilisateur normal sur l'hôte esclave :

rsync -avP mysql-master.tar.bz2 [username]@slavehost:~/.

ou, en utilisant scp :

scp mysql-master.tar.bz2 [username]@slavehost:~/.

Ensuite, SSH vers l'hôte esclave :

ssh [username]@slavehost

En tant que root, arrêtez mysqld sur l'esclave :

service mysql stop

...et extraire l'archive :

tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.

6. Configurer les ID de serveur pour le maître et l'esclave

Modifier /etc/mysql/my.cnf sur le maître, en ajoutant l'entrée server-id=n dans le [mysqld] groupe, où n est un entier unique identifiant le serveur. Généralement, n =1 pour le serveur maître, mais n peut être n'importe quel entier unique dans la plage [1 , 2^32-1 ]. Nous allons définir notre maître sur server-id=1 , et notre esclave de server-id=100 .

(Si mon.cnf n'existe pas sur l'esclave, créez-le. S'il existe, recherchez un identifiant de serveur existant entrée, et décommentez/éditez cette ligne).

Dans /etc/mysql/my.cnf sur l'hôte maître :

[mysqld]
server-id=1

Dans /etc/mysql/my.cnf sur l'hôte esclave :

[mysqld]
server-id=100

7. Déverrouiller les tables et démarrer/redémarrer mysqld sur le maître et l'esclave

Sur le serveur maître, dans le client MariaDB en tant que racine de la base de données, déverrouillez les tables :

mysql -u root -p
UNLOCK TABLES;
\q

Redémarrez mysqld sur le maître :

service mysql restart

Et démarrez-le sur l'esclave :

service mysql start

Vous pouvez vérifier que le nouveau server-id valeur a pris effet sur chaque hôte. En tant que root :

mysqld --verbose --help | grep server-id

8. Configurer l'identité du maître sur l'esclave

Sur l'esclave, configurez l'identité du serveur maître. Entrez le client MariaDB :

mysql -u root -p

Exécutez la commande suivante en remplaçant les valeurs de MASTER_LOG_FILE et MASTER_LOG_POS avec le journal binaire Fichier et Position que vous avez enregistré à l'étape 4, et les valeurs de MASTER_HOST , MASTER_USER , et MASTER_PASSWORD avec vos propres valeurs.

CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=995;

9. Activer l'esclave

Sur l'esclave, dans le client MariaDB en tant que racine de la base :

START SLAVE;

Vous pouvez maintenant vérifier l'état de l'esclave :

SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: masterhost
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqld-bin.000009
          Read_Master_Log_Pos: 1330
               Relay_Log_File: mysqld-relay-bin.000008
                Relay_Log_Pos: 1618
        Relay_Master_Log_File: mysqld-bin.000009
             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: 1330
              Relay_Log_Space: 2204
              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
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:

S'il y a des erreurs dans les processus de réplication, vous les verrez listées ici.

10. Apportez des modifications sur le maître et vérifiez la réplication sur l'esclave

Vous pouvez vérifier que la réplication est en cours en créant une nouvelle base de données sur le maître et en consultant les modifications sur l'esclave.

mysql -u root -p

Créer une nouvelle base de données :

CREATE DATABASE repltest;
USE repltest

Créez un tableau et insérez une valeur :

CREATE TABLE test (hello VARCHAR(10));
INSERT INTO test VALUES ('world');
\q

Entrez maintenant le client MariaDB sur l'esclave :

mysql -u root -p
USE repltest
SELECT * FROM test;
+-------+
| hello |
+-------+
| world |
+-------+
1 row in set (0.00 sec)

11. Répétez le processus pour les esclaves supplémentaires

Vous pouvez répéter ce processus pour chaque esclave supplémentaire. Plus précisément, effectuez ces étapes :

11 (un ). Sur le maître, dans le client MariaDB en tant que racine de la base de données, vider et verrouiller les tables :

FLUSH TABLES WITH READ LOCK;

Après le verrouillage, afficher l'état du maître :

SHOW MASTER STATUS;

Notez le fichier et Position valeurs.

11 (b ). Sur le maître, en tant que root :

tar cjvf /home/[username]/mysql-master.tar.bz2 /var/lib/mysql/dbname

11 (c ). Sur le maître, en tant qu'utilisateur normal :

rsync -avP mysql-master.tar.bz2 [username]@slavehost2:~/.

11 (d ). Sur l'esclave, en tant que root :

service mysql stop
tar xjvf /home/[username]/mysql-master.tar.bz2 -C /.

11 (e ). Dans /etc/mysql/my.cnf sur l'hôte esclave, ajoutez ou modifiez le server-id= ligne dans le [mysqld] group, où la valeur de server-id est nouveau et unique :

[mysqld]
server-id=200

11 (f ). Sur le maître, dans le client MariaDB en tant que racine de la base de données, déverrouillez les tables :

UNLOCK TABLES;

11 (g ). Sur le maître, en tant que root, redémarrez mysqld :

service mysql restart

11 (h ). Sur l'esclave, en tant que root, lancez mysqld :

service mysql start

11 (je ). Sur l'esclave, dans le client MariaDB en tant que racine de la base de données, configurez l'identité du maître, ainsi que le nom et la position du fichier journal binaire de l'étape 10(a) :

CHANGE MASTER TO MASTER_HOST='masterhost', MASTER_USER='repluser', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysqld-bin.nnnnnn’, MASTER_LOG_POS=n;

11 (j ). Sur l'esclave, dans le client MariaDB en tant que racine de la base de données, activez la réplication :

START SLAVE;

12. Dépannage :l'esclave ne parvient pas à se connecter au maître

Vérifiez /var/mysql/my.cnf sur le maître pour une adresse de liaison entrée. Si bind-address est défini sur 127.0.0.1 , le serveur n'acceptera que les connexions de localhost. Commentez cette ligne ou définissez la valeur sur * pour autoriser les connexions à partir de toutes les adresses IPv4 et IPv6. Si vous modifiez mon.cnf , n'oubliez pas de redémarrer mysqld.

Si les connexions ne fonctionnent toujours pas, assurez-vous que votre serveur autorise les connexions sur le port 3306 . Sur le maître, répertoriez les tables du pare-feu du noyau :

iptables -L

Vous pouvez créer une allocation pour les connexions sur le port 3306 avec la commande suivante, en remplaçant le nom de votre périphérique d'interface réseau par eth0 si nécessaire :

iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT


Debian
  1. Comment installer MariaDB sur Debian 9

  2. Comment installer MariaDB sur Debian 10

  3. Comment configurer la réplication synchrone multi-maître MariaDB Galera à l'aide de Debian 10

  4. Comment installer MariaDB 10.x sur Debian 11

  5. Debian – Utiliser deux écrans sur Debian ?

Comment installer OwnCloud 9 sur Debian 8

Comment installer WordPress sur Debian 8

Comment installer MariaDB sur Debian 8

Comment installer Nextcloud sur Debian 8

Comment installer OwnCloud sur Debian 9

Comment installer Joomla sur Debian 10