C'est ainsi que j'ai configuré la réplication maître-esclave avec MariaDB. Étant donné que MariaDB est un fork de MySQL, vous devez suivre les mêmes étapes.
Ma configuration
Je suppose que vous avez déjà deux serveurs Maria/MySQL en cours d'exécution. Ce sont les caractéristiques du mien :
- OS :Debian teste "Bookworm"
- Version MariaDB : 10.5.12
Je travaille avec deux machines virtuelles, pour créer l'esclave, j'ai dupliqué la machine virtuelle maître.
- Maître :192.168.122.13
- Esclave :192.168.122.223
Si vous n'avez pas de base de données maria ou mysql, ici sur unixcop nous avons quelques tutoriels, aussi ici, ici ou ici.
Maître
Comme je l'ai déjà dit, je suppose que vous avez déjà un maria ou mysql en cours d'exécution. Nous devons faire une configuration sur le maître, puis sur l'hôte esclave.
Modifier /etc/mysql/mariadb.conf.d/50-server.cnf
(ou le fichier approprié dans votre configuration), et modifiez les lignes suivantes :
bind-address = <your.master.host.ip> server-id=1
Redémarrez MariaDB et créez un utilisateur avec des privilèges de réplication :
MariaDB [(none)]> CREATE USER 'esclavo'@'192.168.122.223' IDENTIFIED BY 'SlavePass' ; MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'esclavo'@'192.168.122.223'; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
Choisissez n'importe quel nom d'utilisateur et mot de passe que vous voulez, esclavo signifie esclave sur l'espagnol. Définissez l'adresse IP de votre esclave MariaDB. Ensuite, vous pouvez voir le statut avec SHOW MASTER STATUS.
La dernière étape (presque, nous y reviendrons plus tard) sur le maître consiste à copier toutes les données du serveur maître vers l'esclave. Créons un dump avec :
root@my1:~# mysqldump -u root --all-databases -p --master-data > data.sql
Esclave
Sur le serveur esclave, changez d'abord le fichier de configuration /etc/mysql/mariadb.conf.d/50-server.cnf
dans les mêmes lignes que le maître :
bind-address = <your.slave.host.ip> server-id=1
Redémarrez MariaDB et chargez le dump depuis le master avec :
root@my2:/home/gonz# mysql -uroot < data.sql
Ensuite, arrêtez l'esclave, définissez l'hôte maître et démarrez l'esclave avec les commandes suivantes :
root@my2:/home/gonz# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 41 Server version: 10.5.12-MariaDB-1-log Debian 11 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> stop slave; MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.122.13', MASTER_USER='esclavo',MASTER_PASSWORD='SlavePass'; MariaDB [(none)]> START SLAVE;
N'oubliez pas de changer l'adresse IP, l'utilisateur et le mot de passe de l'hôte en vos valeurs si vous ne faites que copier et coller ces commandes ;).
Test et correction
Ça devrait le faire. Si tout fonctionne comme prévu, vous devriez avoir une réplication maître-esclave avec MariaDB.
Vous pouvez maintenant créer une base de données sur le maître et cette base de données devrait apparaître automatiquement dans l'esclave. Mais n'a pas fonctionné pour moi. J'ai créé une base de données sur le maître avec :
MariaDB [(none)]> CREATE DATABASE somedatabase;
Et il n'a pas été répliqué sur l'esclave. Pour voir pourquoi, j'ai couru dans le serveur esclave :
MariaDB [(none)]> show slave status\G ;
Lorsque j'ai recherché cette erreur sur Google, ils ont suggéré de supprimer l'utilisateur esclavo et les privilèges de rinçage. Ceci sur le serveur esclave, arrêtez également l'esclave avant de supprimer l'utilisateur et démarrez l'esclave après avoir vidé les privilèges :
MariaDB [(none)]> stop slave; MariaDB [(none)]> drop user 'esclavo'@'192.168.122.223'; MariaDB [(none)]> flush privileges; MariaDB [(none)]> start slave;
Et cela m'a été corrigé, comme vous pouvez le voir sur la capture d'écran, il existe maintenant une base de données sur le serveur esclave. Et c'est vide. Je suis ensuite retourné au maître pour créer une table et la remplir avec des données :
La dernière étape consiste à vérifier sur l'esclave si la table a été créée et qu'il y a des données à l'intérieur :
Juste pour être sûr, vous pouvez vérifier l'état de l'esclave une fois de plus (ou à tout autre moment dans le futur si quelque chose ne va pas).
Et enfin, j'ai configuré la réplication maître-esclave avec MariaDB.