Il y a quelques jours, j'ai écrit un tutoriel sur la façon de faire de la réplication avec MariaDB (ou MySQL). Il s'agit d'une réplication à sens unique :du maître vers l'esclave; cela signifie que le serveur esclave reçoit les transactions du maître. Mais mon client a besoin d'une réplication bidirectionnelle, car nous ne savons pas quel serveur recevra la transaction et les mêmes données doivent se trouver sur les deux. Ici, je vais vous montrer comment configurer la réplication maître-maître avec MariaDB pour y parvenir.
Ma configuration
Juste au cas où vous auriez manqué l'article précédent, voici les fonctionnalités des machines virtuelles sur lesquelles j'exécute cette réplication.
- OS :Debian teste "Bookworm"
- Version MariaDB : 10.5.12
- Maître1 :192.168.122.13
- Maître2 :192.168.122.223
Configuration maître
Les deux maîtres obtiennent la même configuration, éditez /etc/mysql/mariadb.conf.d/50-server.cnf
et remplacez les valeurs suivantes :
bind-address =X .ip.address>server-id =<X>report_host =masterX log_bin =/var/log/mysql/mysql-bin.logrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/mysql/relay-bin.indexlog-slave-updatesauto_increment_increment=2auto_increment_offset=X
Où X vaut 1 pour le premier maître et 2 pour le second.
Les valeurs d'auto-incrémentation signifient que dans les champs id-kind, l'un des maîtres obtiendra toujours des nombres pairs et l'autre obtiendra toujours des nombres impairs. Ceci afin d'éviter que le même numéro d'identification soit attribué aux deux maîtres en même temps.
Redémarrez maintenant le service mariadb et connectez-vous à mysql pour créer un utilisateur (esclavo signifie esclave en espagnol) avec des privilèges de réplication :
CRÉER L'UTILISATEUR 'esclavo1'@'ip.mysql.master.2' IDENTIFIÉ PAR 'SlavePass' ; ATTRIBUER L'ESCLAVE DE RÉPLICATION SUR *.* À 'esclavo1'@'ip.mysql.master.2' ;FLUSH PRIVILEGES ;Répétez l'opération sur les deux maîtres en modifiant les informations en conséquence (c'est-à-dire sur maître2, créez un utilisateur [email protected] ). Mais d'abord, récupérez un dump sql de votre premier master et chargez-le dans le second :
master1 :mysqldump -u root --all-databases -p --master-data> data.sqlmaster2 :mysql -urootObtenez maintenant des informations sur ce maître dont nous avons besoin pour activer le mode esclave sur l'autre hôte.
MariaDB [(aucun)]> AFFICHER L'ÉTAT DU MAÎTRE ;+------------------+----------+----- ---------+------------------+| Fichier | Poste | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+-- ----------------+| mysql-bin.000003 | 358 | | |+------------------+----------+-------------+--- ---------------+1 ligne dans le jeu (0.000 sec)STOP SLAVE ;Configuration des esclaves
Il est maintenant temps de configurer le mode esclave sur les deux hôtes mariadb/mysql :
CHANGE MASTER TO MASTER_HOST='ip.mysql.master.X', MASTER_USER='esclavoX', MASTER_PASSWORD='SlavePass MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS =358';START SLAVE;La vaule master_host est l'adresse IP de l'autre maître, la valeur master_user est l'utilisateur que vous avez créé sur l'autre maître, et enfin vous obtenez les valeurs master_log_file et master_log_post du
show master sta
commande tus.Tout vérifier
Pour voir si j'étais capable d'activer la réplication maître-maître avec MariaDB, j'ai exécuté un test très simple :
J'ai créé une base de données sur un maître, puis une simple table (seulement 1 champ) et inséré quelques enregistrements. Ensuite, j'ai vérifié avec une sélection que les données apparaissent sur les deux hôtes. Enfin, j'ai ajouté une colonne incrémentielle automatique d'id sur un hôte et inséré quelques données supplémentaires pour voir comment cela apparaît :
Juste pour ajouter plus de confusion à ces captures d'écran :j'ai ajouté la configuration auto_increment (incrément et décalage) à my.cnf pendant ce test et non depuis le début, car je ne le savais pas avant d'avoir commencé les tests.
Quoi qu'il en soit, c'est ainsi que j'ai activé la réplication maître-maître avec MariaDB, c'est-à-dire également la réplication esclave-esclave. Ou maître-esclave et réplication esclave-maître, nommez-le.
Je pense que la prochaine étape logique est de rechercher et d'utiliser un Galera Cluster.