MISE EN PLACE D'UNE REPLICATION ENTRE DEUX SERVEURS MYSQL
REPLICATION CONTINUE
 
 

Préambule. 2

Édition des fichiers my.cnf. 2

Serveur Maître A.. 2

Serveur Esclave B.. 2

Création de la réplication. 3

Serveur Maître. 3

Création de l’utilisateur de réplication. 3

Extraction des données. 3

Serveur Esclave. 4

Définition du serveur Maître. 4

Importation des données. 4

Lancement  de la réplication. 4

Quelques commandes utiles. 4

Outils intéressants. 5

Supervision de la réplication (NAGIOS) 5

Script de monitoring de réplication. 5

Définition du service. 5

Définition de la commande de réplication. 5

Bibliographie. 8

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Préambule

 
Merci à Tristan ! 
 
Version mysql-server: 5.1.43
 
Serveur A : 192.168.0.1 --> Serveur Maître
Serveur B : 192.168.0.2 --> Serveur Esclave
Masque sous réseau /24
 
Port par défaut MySQL: 3306
 

Édition des fichiers my.cnf

 
Arrêter le service mysql sur les serveurs A et B avant de débuter
 
Serveur Maître A: 
ajouter les directives suivantes: 
 
# replication
log-bin    = mysql-bin.log
server-id =1
innodb_flush_log_at_trx_commit       = 1
sync_binlog            = 1
 
Serveur Esclave B:
 
# http://dev.mysql.com/doc/refman/5.1/en/replicationoptions.
#option_mysqld_server-id
#server-id = <identifiant UNIQUE>
server-id = 2
 
 
# Sans cette directive, un changement de nom d'hôte empêcherait
la réplication de fonctionner correctement
relay-log = mysqld-relay-bin
 
Démarrer les services MySQL sur les serveurs A et B
 

 

 

 

 

 

Création de la réplication

 
Serveur Maître: 
 
Se connecter au serveur MySQL A :
mysql -h192.168.0.1 --port=3306 -uroot -p 
 
 

Création de l’utilisateur de réplication

 
Créer un utilisateur dédié à la réplication :
CREATE USER 'replication'@'localhost' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* to 'replication'@'localhost';
FLUSH PRIVILEGES;
 
Obtenir le nom et la position du binlog :
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
UNLOCK TABLES;
 
Exemple de sortie de la commande SHOW MASTER STATUS :
 
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000019 |  4890520 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.08 sec)
 
 
Se déconnecter du serveur :
exit;
 
Bloquer les opérations d'écriture :
FLUSH TABLES WITH READ LOCK;
 

Extraction des données

 
Ouvrir une autre session shell (la session MySQL ayant posé le verrou ne
doit pas être fermée)
 
Extraire les données :
mysqldump --all-databases --master-data > master.dump.sql
Copier le fichier master.dump.sql sur le serveur esclave
Retourner sur la session MySQL qui a posé le verrou et exécuter :
 
UNLOCK TABLES;
Quitter la session
 
Serveur Esclave :
 
Se connecter au serveur MySQL B :
mysql -h192.168.0.2 --port=3306 -uroot -p
 
 

Définition du serveur Maître

 
Définir le serveur maître :
CHANGE MASTER TO
MASTER_HOST='localhost', -- 192.168.0.1
MASTER_USER='replication',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='<nom du binlog>', --  mysql-bin.000019 
MASTER_LOG_POS=<position du binlog>;-- 4890520
 
Se déconnecter du serveur :
exit;
 

Importation des données

 
- Importer les données du serveur maître :
mysql -uroot -p < master.dump.sql
 

Lancement  de la réplication

 
- Démarrer la réplication :
mysql -uroot -p -e 'START SLAVE;'
 
 
Les opérations effectuées sur le serveur Serveur A sont maintenant répliquées en
continu sur le serveur B
 

Quelques commandes utiles

 SHOW MASTER STATUS : exécutée sur un serveur maître, cette commande permet
de connaître les coordonnées du log binaire ;
 SHOW SLAVE STATUS : exécutée sur un serveur esclave, cette commande permet
de connaître l'état de la liaison entre le serveur esclave et le serveur maître ;
 SHOW PROCESSLIST : exécutée sur n'importe quel serveur, cette commande
permet de connaître l'activité des esclaves liés au serveur.
 
 

Outils intéressants

- Maatkit
Les outils proposés par la suite logicielle (gratuite et libre) Maatkit
(http://www.maatkit.org) peuvent se révéler extrêmement intéressants pour exploiter
une architecture de réplication MySQL. Une présentation de ces outils est disponible à
l'adresse : http://www.slideshare.net/MySQLConference/make-your-life-easier-withmaatkit
- mytop
Cet utilitaire permet de surveiller le fonctionnement d'une base de données MySQL à la
manière de l'outil GNU/Linux top : http://jeremy.zawodny.com/mysql/mytop/
 

Supervision de la réplication (NAGIOS)

 

Perso j’utilise la version 3.2.0

 

Nagios est l’outil de monitoring par excellence du monde libre.

 

 

Script de monitoring de réplication

 

Grâce à script en bash que j’ai trouvé sur le net check_mysql_slavestatus.sh. J’ai mis en place une surveillance sur le comportement de la réplication.

Déposer le script dans le répertoire où se trouve les plugins.

/usr/local/nagios/libexec

Ajouter le mode d’exécution chmod 755 sur le script.

 

Définition du service

 

define service{

        use                     generic-service

        host_name                   192.168.0.2

        service_description     MySQL Replication Status

        check_command         check_mysql_slavestatus!3306!user!password

}

 

Définition de la commande de réplication

 

# 'check_mysql_slavestatus' command definition

define command{

        command_name    check_mysql_slavestatus

        command_line        $USER1$/check_mysql_slavestatus.sh -H 192.168.0.2 -P $ARG1$ -u $ARG2$ -p $ARG3$

}

 

 

Exemple :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bibliographie

Les sites et ouvrages suivants se sont révélés utiles à la mise en place de l'architecture
décrite dans ce document :
http://dev.mysql.com/doc/refman/5.1/en/replication-howto.html
http://dev.mysql.com/doc/refman/5.1/en/replication-features.html
http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-diffengines.html
http://dev.mysql.com/doc/refman/5.1/en/replication-implementationdetails.
html
http://www.mysqlperformanceblog.com/2008/04/28/mysql-replication-vs-drbdbattles/
http://www.xaprb.com/blog/2007/01/20/how-to-make-mysql-replicationreliable/
http://serverfault.com/questions/42884/why-exactly-is-skip-slave-startrecommended-
with-mysql-start-slave-until
http://oreilly.com/catalog/9780596101718