Réplication avec MySQL sous Debian Squeeze :
Soient deux serveurs MySQL :
Srv-db01 : 192.168.0.101/24
Srv-db02 : 192.168.0.102/24
Sur les deux serveurs, on installe les paquets suivants :
mysql-server
mysql-client
libmysqlclient15-dev
Donc :
# aptitude install mysql-server mysql-client libmysqlclient15-dev
Réplication master-slave :
On va configurer pour que Srv-db01 soit master et Srv-db02 slave :
Configuration du master (Srv-db01):
Voici les modifications à faire dans le fichier de configuration /etc/mysql/my.cnf :
Activer les lignes :
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
Si on veut que certaines bases seulement soient répliquées et d’autres non, modifier les lignes :
binlog_do_db = db01
binlog_do_db = db02
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
Ajouter un utilisateur pour la réplication :
mysql> grant replication slave on *.* to 'rep_user'@'%' IDENTIFIED BY 'rep_pwd';
Quitter mysql et redemarer le service :
# invoke-rc.d mysql restart
Afficher la configuration du master :
mysql> show master status ;
+------------------+----------+-------------------+--------------------------+
| File | Position | Binlog_Do_D | Binlog_Ignore_DB |
+------------------+----------+-------------------+--------------------------+
| mysql-bin.000001 | 106 | db01, db02 | mysql,information_schema |
+------------------+----------+-------------------+--------------------------+
Le master est prêt pour la réplication.
Configuration du slave (Srv-db02):
Voici les modifications à faire dans le fichier de configuration /etc/mysql/my.cnf :
Activer la ligne suivante et modifier sa valeur :
server-id = 2
Ajouter les lignes:
binlog_do_db = db01
replicate-do-db = db01
replicate-do-table = db01.% #repliquer toutes les tables
replicate-wild-do-table = db01.%
binlog_do_db = db02
replicate-do-db = db02
replicate-do-table = db02.%
replicate-wild-do-table = db02.%
Indiquer les infos de connexion au master pour la réplication :
mysql> change master to master_host=`192.168.0.101`, master_user='rep_user', master_password='rep_pwd', master_port=3306, master_log_file='fichierdelog.000001', master_log_pos=106 ;
Le Slave est prêt.
Quitter mysql et redémarrer le service :
# invoke-rc.d mysql restart
Lancer la réplication :
mysql> slave start ;
Réplication master-master :
Le principe est le suivant : Srv-db01 est le master du slave1 mais slave du master2 qui n’est autre que Srv-db02 et inversement.
Pour ce faire, il faut alors configurer chaque serveur pour être à la fois master et slave l’un de l’autre.
Automatiser la réplication :
Pour que la réplication se fasse automatiquement,
On crée un fichier, par exemple replication.sql contenant :
slave start ;
On peut exécuter périodiquement la commande suivante à l’aide de crontab, par exemple tous les jours à 05h:
# crontab –e
*5*** mysql –uroot –p[root_passwd] < replication.sql 1>/dev/null 2>&1
Ctrl+x pour quitter puis enregistrer les modifications.