Différences entre les versions de « Mysql resynchronisation / replication »
| Ligne 27 : | Ligne 27 : | ||
database/tables) Il faut donc copier le dossier mysql du master vers le slave, une fois copie, il est faut lancer le master, puis le slave qui va commencer la synchro. Il est | database/tables) Il faut donc copier le dossier mysql du master vers le slave, une fois copie, il est faut lancer le master, puis le slave qui va commencer la synchro. Il est | ||
possible de n'avoir qu'une synchronisation de table ou de base ou d'avoir une synchronisation croisee (master/master). Cela n'etant pas standard, cela n'est pas documente ici. | possible de n'avoir qu'une synchronisation de table ou de base ou d'avoir une synchronisation croisee (master/master). Cela n'etant pas standard, cela n'est pas documente ici. | ||
<pre> | </pre> | ||
= Resynchronisation d'une réplication = | = Resynchronisation d'une réplication = | ||
Version du 6 avril 2011 à 17:23
Mise en place réplication
Configuration
Pour mettre en place la synchronisation, il faut 2 serveurs MySQL qui ont accès l'un a l'autre (en pratique le slave doit avoir accès au master uniquement). Il faut de plus créer, sur le master, un user spécifique a la réplication : GRANT REPLICATION SLAVE ON *.* TO 'replicadmin'@'IP du slave' IDENTIFIED BY 'password'; Dans le fichier my.cnf du slave il faut ces lignes : server-id = 2 master-host = <ip_master> master-user = <user_replication> master-password = <password_user> master-port = <port_master> dans le fichier my.cnf du master il faut uniquement : server-id = 1 log_bin = /var/log/mysql/mysql-bin.log 1ere synchronisation La synchronisation ne peut se faire a partir de rien, il faut que les informations du slave soit l'exacte replique du master au demarrage (meme comptes, meme password, même database/tables) Il faut donc copier le dossier mysql du master vers le slave, une fois copie, il est faut lancer le master, puis le slave qui va commencer la synchro. Il est possible de n'avoir qu'une synchronisation de table ou de base ou d'avoir une synchronisation croisee (master/master). Cela n'etant pas standard, cela n'est pas documente ici.
Resynchronisation d'une réplication
Première méthode
Maintenant que les serveurs MySQL de plate forme Claranet appartiennent tous à la v5, il est possible d'utiliser la commande LOAD DATA sans que le slave se désynchronise quelques heures plus tard.
Pour cela, sur le serveur slave:
- Détruire les bases qui sont répliquées via un DROP DATABASE <BASE> (S'assurer que les bases détruites sont bien répliquées en inspectant le champs Replicate_Wild_Do_Table obtenu via la sortie de SHOW SLAVE STATUS \G) - STOP SLAVE - Recréer les bases détruites - LOAD DATA FROM MATER; - Attendre (2 minutes grand max) - START SLAVE
Si tout s'est bien passé, nous n'avons pas vu de warnings ou d'erreurs en sortie lors de l'exécution des commandes précédentes.
Maintenant, il est possible que certaines sous-versions appartenant à la 5 sortent un warning lors du LOAD DATA FROM MASTER. Un SHOW WARNINGS montrera que cette commande est obsolète (LOAD DATA) et qu'il est nécessaire d'utiliser la méthode expliquée dans le paragraphe suivant (celle préconisée par MySQL) pour remettre sur pieds la réplication.
Deuxième méthode
Pour faciliter les choses, j'ai créé un script Shell sur le master et sur chaque Slave. Il permet d'effectuer une resynchro globale et complète en quelques minutes, sans trop interrompre le service.
Le script Shell est nommé Mysql-synchro-syncher-slave.sh sur les slaves.
Procédure à suivre :
- Sur le master executer : Mysql-synchro-syncher-master.sh --lock
Pour info, sur Nord le script effectue alors les actions suivantes :
- FLUSH TABLES WITH READ LOCK - Copie binaires des tables dans un répertoire temporaire - RESET MASTER - UNLOCK TABLES - Démarrage d'un daemon rsync qui va permettre d'exporter les tables binaires vers les slaves. Ce daemon rsync est lancé en avant-plan : il faudra taper Ctrl+C sur Nord pour le stopper, une fois que les slaves auront téléchargé les bases au format binaire.
- Sur chaque slave, executer : Mysql-synchro-syncher-slave.sh
Pour info, sur les slaves le script effectue alors les actions suivantes :
- Import des bases binaires, dans un répertoire temporaire, depuis le rsync lancé sur Nord - Arret du serveur MySQL local sur le slave - Remplacement des bases désynchronisées par les bases binaires importées depuis Nord - Effacement des infos de synchronisation - équivalent à un RESET SLAVE - Redémarrage du MySQL local - Le MySQL se reconnecte au master, et la synchro reprend.
Une fois que tous les slaves sont correctement resynchronisés, arreter le daemon Rsync lancé sur Nord (en tapant Ctrl+C).
- Procédure manuelle sur un slave
mysql> CHANGE MASTER TO
-> MASTER_HOST='master.fr.clara.net',
-> MASTER_PORT=3306,
-> MASTER_USER='clara_replic',
-> MASTER_PASSWORD='xxxx',
-> MASTER_LOG_FILE='xxxxxxx',
-> MASTER_LOG_POS=xx;
Query OK, 0 rows affected (0.00 sec)