Exhaustif.com
Contact Combattre la pyrale du buis
Exhaustif.com
Configuration d’une replication MySQL
Date de publication : lundi 22 septembre 2008, dernière modification le : lundi 22 septembre 2008.

Comment configurer simplement une réplication MySQL

  Configuration d’une replication MySQL

Introduction

Pour gagner en performance lors de requête de type SELECT, ou pour avoir une sauvegarde complète d’une base. La réplication MySQL est un très bon choix, nous allons voir ici la mise en place.
System maître linux : Debian etch
System esclave linux : Debian etch

Terminologie
- Maître = master en anglais = serveur principal contenant les données de références
- Escalve = slave en anglais = serveur reprenant fidèlement les données du maître.

Pré-requis

Maître

# apt-get install mysql-server
mysql > CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

On crée un utilisateur spécifique à la réplication, qui doit avoir des droits spéciaux.

mysql > CREATE USER 'rep'@ '%';
mysql > GRANT SELECT ,
RELOAD ,
SUPER ,
REPLICATION SLAVE ON * . *
TO 'rep'@ '%'
WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0
MAX_UPDATES_PER_HOUR 0
MAX_USER_CONNECTIONS 0 ;

Dans le my.cnf : commentez la ligne
bind-address = 127.0.0.1
Pour permettre des connections externes.

Esclave

# apt-get install mysql-sever

Mise en place

Maitre

Ceci est optionnel et permet de ne pas partir de zéro. Si vous voulez passer outre, ou si vous ne possédez aucune donnée pour le moment ignorer toutes les lignes qui commencent par (!)

(!)mysql > FLUSH TABLES WITH READ LOCK;

(!) Puis, on exporte par dump les données qu’on sauvegarde dans un fichier ".sql".

(!)mysql > SHOW MASTER STATUS;

File Position Binlog_Do_DB Binlog_Ignore_DB
mysql-bin.000007 64178
Conservez ce résultat, il sera utile pour la suite.

(!) mysql > UNLOCK TABLES;

Dans le my.cnf
server-id = 3301
log_bin = /var/log/mysql/mysql-bin.log
3301 : Numéro aléatoire mais unique qui nous permettra d’identifier le Maitre.

Esclave
Dans le my.cnf
server-id=3302

(!) Import du Dump maître sur l’esclave.

Définition du maître

mysql > CHANGE MASTER TO
MASTER_HOST='192.168.1.112', -- Adresse Ip du Maitre
MASTER_USER='rep',
MASTER_PASSWORD='',
(!) MASTER_LOG_FILE='mysql-bin.000007',
(!) MASTER_LOG_POS=64178;
mysql > START SLAVE

La synchronisation est effective. L’esclave va rattraper son retard automatiquement.

Chaque requête d’insertion sur le maitre sera envoyé sur le/les esclaves, cependant, aucune modification sur un esclave ne sera reporté sur les autres serveurs.
Attention donc, les esclaves ne sont là que pour la lecture et pour avoir un backup.

Test de Comportement

Test 1 : Démarrage sans accès
La lecture sur l’esclave se fait sans aucun problème.
Aucune insertion ne doit être faites sur l’esclave.

mysql > SHOW SLAVE STATUS;

Slave_IO_Running : No Slave_SQL_Running : Yes

Cela veut dire qu’aucune synchronisation n’est en cours, mais que le serveur SQL fonctionne.

Ajout d’une table sur le Maitre.

Rétablissement de la connexion Maitre Esclave.

Table récupéré automatiquement après 30 secondes.
Synchronisation effective par la suite.

mysql > SHOW SLAVE STATUS;
Slave_IO_Running : Yes
Slave_SQL_Running : Yes

Tout est rentré dans l’ordre.

Test 2 : redémarrage de l’esclave pendant une synchronisation
La synchronisation continue après le redémarrage, tout est rentré dans l’ordre.

Problèmes et solutions

Une action qui bloque un esclave.
Sur l’esclave :

mysql > SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
  • Sautera la requête gênante, il faut parfois en passer 2, si la requête modifie des auto-increment.
  • Remarque : en théorie, ce cas ne se retrouve que si une modification a été faites sur un esclave. Or ceci ne doit jamais être le cas.

Et pour éviter de se retrouver bloquer, mettre :

slave_skip_errors=ALL

Dans le my.cnf de l’esclave

Ne pas redémarrer la synchronisation au lancement de MySql :

  • Dans le my.cnf : skip-slave-start
 


Actualités liées

11/02 Sortie de TrueCrypt version 5 Sortie de TrueCrypt version 5
5/12 Top 10 des pertes de données Top 10 des pertes de données
3/08 Découvrez JkDefrag Découvrez JkDefrag
30/07 Nos députés découvrent Ubuntu Nos députés découvrent Ubuntu
19/07 La licence GNU GPL passe en version 3 La licence GNU GPL passe en version 3
Chroniques liées

novembre 2012 Générer des mots de passe en ligne de commande linux/unix Générer des mots de passe en ligne de commande linux/unix
septembre 2008 Sauvegardes incrémentales avec rsnapshot Sauvegardes incrémentales avec rsnapshot
septembre 2008 Configuration d’une replication MySQL Configuration d’une replication MySQL
septembre 2008 Installation de RoundCube sous Debian Installation de RoundCube sous Debian
mars 2008 Installer un serveur svn sous Debian Etch Installer un serveur svn sous Debian Etch