Base de données · 9 min read · Jan 29, 2026
Répliquer une base de données maître en utilisant 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 permettre une performance optimisée pour les applications. Ce tutoriel 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 soyez conscient que plusieurs commandes et emplacements de fichiers par défaut seront différents. En particulier, vous devez substituer les chemins de /etc/mysql/my.cnf, /var/lib/mysql, le nom et le chemin par défaut de votre fichier journal binaire, et les commandes pour démarrer, arrêter et redémarrer mysqld selon les 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 fichiers /etc/hosts respectifs. Chaque hôte doit être capable de pinguer l’autre, et vous devez pouvoir ssh de l’un à l’autre en tant qu’utilisateur normal.
2. Activer le journal binaire mysqld sur le maître
Sur l’hôte maître, vérifiez que la journalisation binaire est activée. L’invocation de mysqld avec les options –verbose –help affichera les valeurs opérationnelles pour le démon MariaDB. En tant que root :
mysqld --verbose --help | grep log-bin...
log-bin (Pas de valeur par défaut)
...La valeur de l’entrée log-bin définit la convention de nommage des fichiers journaux binaires. Sur Debian, ces fichiers résident dans /var/lib. Si la valeur de log-bin est (Pas de valeur par défaut), vous devrez activer la journalisation en modifiant le fichier de configuration my.cnf. Sur Debian, my.cnf se trouve dans le répertoire /etc/mysql.
Ouvrez /etc/mysql/my.cnf dans un éditeur de texte et localisez le groupe [mysqld]. S’il n’existe pas, créez-le et entrez une ligne qui lit simplement log-bin.
[mysqld]
log-binInclure cette entrée activera la journalisation binaire lorsque mysqld sera redémarré.
Vous pouvez choisir de définir une valeur pour log-bin, par exemple log-bin= nomdefichier, pour définir un nom personnalisé pour le fichier journal binaire. Dans ce tutoriel, nous ne définirons pas de valeur, et les noms de fichiers journaux par défaut seront utilisés.
Redémarrez mysqld :
service mysql restartVérifiez que le changement a pris effet :
mysqld --verbose --help | grep log-bin...
log-bin mysqld-bin
...Comme montré ici, le nom de 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é d’avoir toutes les tâches de réplication effectuées par un utilisateur de réplication dédié. Dans ces exemples, nous nommerons l’utilisateur repluser et définirons le mot de passe de cet utilisateur sur la chaîne replpass.
Accordez à cet utilisateur les privilèges globaux SUPER, RELOAD, et REPLICATION SLAVE. Cela permettra à l’utilisateur de réplication d’exécuter des commandes superutilisateur, de vider les caches de base de données, et de récupérer des mises à jour du serveur maître.
Entrez dans le client MariaDB en tant que root de la base de données :
mysql -u root -pÀ l’invite de MariaDB, entrez la commande :
GRANT SUPER, RELOAD, REPLICATION SLAVE ON *.* TO 'repluser'@'%' IDENTIFIED BY 'replpass';Ici, le caractère générique 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'4. Vider les caches de base de données et définir les tables en lecture seule
En préparation pour faire 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 système.
Sur le maître :
FLUSH TABLES WITH READ LOCK;Maintenant que les tables sont verrouillées, vérifiez l’état du maître :
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000005 | 995 | | |
+-------------------+----------+--------------+------------------+Vos informations seront différentes, mais notez les valeurs de File et Position. Vous utiliserez ces informations à l’étape 7.
Quittez le client MariaDB :
\q5. Instantané des bases de données 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 tar une seule base de données, résidant au 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 chemins complets à la commande, par exemple /var/lib/mysql/dbname1 /var/lib/mysql/dbname2…
tar cjvf /home/[nom_utilisateur]/mysql-master.tar.bz2 /var/lib/mysql/dbnameMaintenant, en tant qu’utilisateur normal nom_utilisateur, transférez ce fichier vers un compte utilisateur normal sur l’hôte esclave :
rsync -avP mysql-master.tar.bz2 [nom_utilisateur]@slavehost:~/.ou, en utilisant scp :
scp mysql-master.tar.bz2 [nom_utilisateur]@slavehost:~/.Ensuite, SSH vers l’hôte esclave :
ssh [nom_utilisateur]@slavehostEn tant que root, arrêtez mysqld sur l’esclave :
service mysql stop…et extrayez l’archive :
tar xjvf /home/[nom_utilisateur]/mysql-master.tar.bz2 -C /.6. Configurer les ID de serveur pour le maître et l’esclave
Modifiez /etc/mysql/my.cnf sur le maître, en ajoutant l’entrée server-id= n dans le groupe [mysqld], où n est un entier unique identifiant le serveur. Communément, 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 sur server-id=100.
(Si my.cnf n’existe pas sur l’esclave, créez-le. S’il existe, recherchez une entrée server-id existante, et décommentez/modifiez cette ligne).
Dans /etc/mysql/my.cnf sur l’hôte maître :
[mysqld]
server-id=1Dans /etc/mysql/my.cnf sur l’hôte esclave :
[mysqld]
server-id=1007. 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 root de la base de données, déverrouillez les tables :
mysql -u root -pUNLOCK TABLES;\qRedémarrez mysqld sur le maître :
service mysql restartEt démarrez-le sur l’esclave :
service mysql startVous pouvez vérifier que la nouvelle valeur server-id a pris effet sur chaque hôte. En tant que root :
mysqld --verbose --help | grep server-id8. Configurer l’identité du maître sur l’esclave
Sur l’esclave, configurez l’identité du serveur maître. Entrez dans le client MariaDB :
mysql -u root -pExécutez la commande suivante, en remplaçant les valeurs de MASTER_LOG_FILE et MASTER_LOG_POS par le journal binaire File et Position que vous avez notés à l’étape 4, et les valeurs de MASTER_HOST, MASTER_USER, et MASTER_PASSWORD par 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 root de la base de données :
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. Apporter des modifications sur le maître et vérifier la réplication sur l’esclave
Vous pouvez vérifier que la réplication se produit en créant une nouvelle base de données sur le maître et en voyant les changements sur l’esclave.
mysql -u root -pCréez une nouvelle base de données :
CREATE DATABASE repltest;USE repltestCréez une table et insérez une valeur :
CREATE TABLE test (hello VARCHAR(10));INSERT INTO test VALUES ('world');\qMaintenant entrez dans le client MariaDB sur l’esclave :
mysql -u root -pUSE repltestSELECT * FROM test;+-------+
| hello |
+-------+
| world |
+-------+
1 row in set (0.00 sec)11. Répéter le processus pour des esclaves supplémentaires
Vous pouvez répéter ce processus pour chaque esclave supplémentaire. En particulier, effectuez ces étapes :
11 ( a) . Sur le maître, dans le client MariaDB en tant que root de la base de données, videz et verrouillez les tables :
FLUSH TABLES WITH READ LOCK;Après le verrouillage, montrez l’état du maître :
**SHOW MASTER STATUS;Notez les valeurs File et Position.
11 ( b) . Sur le maître, en tant que root :
tar cjvf /home/[nom_utilisateur]/mysql-master.tar.bz2 /var/lib/mysql/dbname11 ( c) . Sur le maître, en tant qu’utilisateur normal :
rsync -avP mysql-master.tar.bz2 [nom_utilisateur]@slavehost2:~/.11 ( d) . Sur l’esclave, en tant que root :
service mysql stoptar xjvf /home/[nom_utilisateur]/mysql-master.tar.bz2 -C /.11 ( e) . Dans /etc/mysql/my.cnf sur l’hôte esclave, ajoutez ou modifiez la ligne server-id= dans le groupe [mysqld], où la valeur de server-id est nouvelle et unique :
[mysqld]
server-id=20011 ( f) . Sur le maître, dans le client MariaDB en tant que root 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 restart11 ( h) . Sur l’esclave, en tant que root, démarrez mysqld :
**service mysql start
11 ( i) . Sur l’esclave, dans le client MariaDB en tant que root de la base de données, configurez l’identité du maître, et le nom de fichier journal binaire et la position 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 root de la base de données, activez la réplication :
START SLAVE;12. Dépannage : Esclave incapable de se connecter au maître
Vérifiez /var/mysql/my.cnf sur le maître pour une entrée bind-address. Si bind-address est défini sur 127.0.0.1, le serveur n’acceptera que les connexions depuis localhost. Commentez cette ligne, ou définissez la valeur sur * pour permettre les connexions depuis toutes les adresses IPv4 et IPv6. Si vous modifiez my.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, listez les tables de pare-feu du noyau :
iptables -LVous pouvez créer une autorisation pour les connexions sur le port 3306 avec la commande suivante, en substituant le nom de votre interface réseau pour eth0 si nécessaire :
iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPTRecevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.