Bonjour,
suite à la lecture de plusieurs docs incomplètes ou obsolètes, voici une méthode pour mettre en place une réplication master/slave sur MariaDb ou Mysql.
Présentation : le master s’appelle master.monreseau.local, le slave s’appelle slave.monreseau.local. Le slave doit pouvoir communiquer avec le master sur le port mysql (par défaut 3306).
On suppose que les serveurs sont installés et fonctionnels sur les deux machines.
Sur le master
Editer le script de démarrage (par défaut /etc/init.d/mysql). Il existe une variable « other_args » dans lequel il faut ajouter les arguments suivants :
other_args=" --log-basename=master --log-bin --binlog-format=row --server_id=1 "
Le server id doit être unique.
Relancer le serveur mysql :
service mysql restart
Se connecter sur mysql :
mysql -u root -p
Créer un user qui va avoir les droits de réplication, et lui donner les droits :
create user 'replication'@'slave.monreseau.local' identified by 'MonNouveauPassword';
grant replication slave on *.* to 'replication'@'slave.monreseau.local' identified by 'MonNouveauPassword';
Bloquer les tables :
FLUSH TABLES WITH READ LOCK
Montrer le statut du master
SHOW MASTER STATUS
Devrait montrer quelque chose qui ressemble à ça :
MariaDB [(none)]> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | master-bin.000006 | 659 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
Noter ces informations, et ouvrir une autre session (ne pas fermer la session mysql en cours).
Faire un dump de toutes les databases :
mysqldump --all-databases > dump.sql
Copier ce dump sur la machine slave.
Sur le slave
Editer le script de démarrage (par défaut /etc/init.d/mysql). Il existe une variable « other_args » dans lequel il faut ajouter les arguments suivants :
other_args=" --server_id=2 "
Importer les donées précédentes
mysql < dump.sql
Redémarrer le serveur
service mysql restart
Se connecter à mysql
mysql -u root -p
Régler pour synchroniser avec le master (penser à changer le password, le master log file et le master log pos en fonction des infos récupérées avant)
CHANGE MASTER TO MASTER_HOST='master.monreseau.local', MASTER_USER='replication', MASTER_PASSWORD='MonNouveaupassword', MASTER_PORT=3306, MASTER_LOG_FILE='master-bin.000006', MASTER_LOG_POS=659, MASTER_CONNECT_RETRY=10;
Sur le master
Libérer les tables :
UNLOCK TABLES;
Sur le slave :
Lancer la réplication
START SLAVE;
Tester la réplication :
SHOW SLAVE STATUS;