mardi 13 septembre 2011

Debian Squeeze: La replication avec MySQL

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.