Documentation : Réplication MySQL
Date de publication : 13.7.2004
Date de modification : 2.3.2007
|
|
Sommaire
IntroductionLa réplication MySQL est apparue avec la version 3.23.15 de MySQL et est à sens unique, c'est-à-dire que vous ne pouvez répliquer les données que dans un sens (La réplication bi-directionnelle est aussi envisageable pour des tables ne contenant pas de clés primaires, d'index, et de champ auto-incrémentable).
Le premier serveur joue le rôle de maître et tous les autres serveurs jouent le rôle d'esclave. Le serveur maître garde un fichier log, au format binaire, des mises à jour effectuées et un fichier de référence pour la rotation des logs. Le serveur esclave quand à lui informe tout d'abord le maître de la dernière fois qu'il est venu effectuer la réplication, et à partir de cette information regarde si de nouvelle donnée sont apparues.
ATTENTION : Toute les modifications sont effectuées sur le serveur maître, si une modification est effectuée sur un serveur esclave, la réplication se brise. Il vous faudra alors rétablir la réplication entre les serveurs. |
La réplication unidirectionnelle de bases de données à plusieurs avantages : |
Les logs binaires doivent remplacer le format de log classique de MySQL, et ces mêmes logs permettent d'effectuer des replications MySQL.
Lorsqu'on démarre MySQL avec l'option --log-bin[=nom du fichier], MySQL écrit un fichier log qui contient toutes les requêtes SQL qui ont permis de mettre à jour vos bases de données. Si aucun nom de fichier n'est donné, le fichier log commencera un -bin et le nom de la machine. Si un nom de fichier est donné, mais qu'il ne contient pas de chemin d'accès, ce fichier sera alors stocké dans le répertorie DATA ou VAR de MySQL. Si vous rajouter un extension au fichier du type --log-bin=fichier.extension, l'extension sera supprimée automatiquement.
Vous pouvez aussi n'enregistrer les logs binaires que pour une seule base de données avec l'option de démarrage MySQL --binlog-do-db=base. Ou encore vous pouvez exclure une base de donnée de la réplication MySQL avec l'option de démarrage --binlog-ignore-db=base
Implémentation
La réplication MySQL est basé sur le fichier log binaire du serveur maître, étudié ci-dessus, qui garde une trace de toutes les requêtes SQL (update, delete, etc.). Le serveur esclave quand à lui va lire le fichier log binaire du serveur maître pour qu'il puisse exécuter les requêtes SQL stockées dans ce fichier.
Si vous désirez mettre une réplication en place, alors que la base de donnée, concernée par la réplication, du maître est déjà fournies en donnée, il vous faut tout d'abord effectuer une copie complète de celle-ci avant de commencer une réplication. La réplication ne va pas reconstituer intégralement votre base, mais uniquement commencé à l'instant ou vous l'avez initiée.
Une façon de copier les données du serveur maître vers le serveur esclave est d’utiliser la commande LOAD DATA FROM MASTER disponible à partir de la version 4.0.0 et qui ne fonctionne qu’avec des tables du type MyISAM. Lors de l’exécution de cette commande les bases de données du serveur maître ont un état READ LOCK, ce qui veut dire qu’aucune mise à jour sur le serveur maître n’est possible lors du transfert des tables vers le serveur esclave.Dans le version MySQL 5.0 en cours de développement l’état READ LOCK ne sera plus nécessaire.
Du à ces limitations, nous vous recommandons de n’utiliser la commande LOAD DATA FROM MASTER seulement si la quantitée de données est relativement faible, ou si un état READ LOCK prolongé sur le serveur maître est acceptable. La vitesse d’exécution de la commande LOAD DATA FROM MASTER varie d’un système à l’autre, une moyenne de vitesse de transfert est d’environ de 1MB de données transférées par seconde (basé sur des calculs avec un Pentium 700 Mhz et une connection réseau de 100Mbit/s).
Après que le serveur esclave ai récupéré une copie des données du serveur maître, le serveur esclave se connectera sur le serveur maître uniquement pour récupérer les processus de mise à jour. Si le serveur esclave n’est plus disponible, ou que le serveur esclave perd la connexion avec le serveur maître, celui-ci va continuer périodiquement d’essayer de se reconnecter tant qu’il ne pourra pas contacter le serveur maître et mettre à jour la réplication. L’interval de reconnexion est controler par l’option –master-connect-retry dont la valeur par défault est 60 secondes.
Chaque serveur esclave garde une trace de l’interruption de la connexion. Le serveur maître n’a pas de trace du nombre de serveur esclave configuré et s’ils sont à jour ou pas.
Les étapes suivantes sont nécessaires à réaliser pour toutes mise en place de réplication : |
Vous pouvez tester votre réplication en insérant une table dans une de vos base et en y ajoutant une valeur quelconque. Sinon, les commandes suivantes vous permettent d'avoir des informations sur l'état de votre réplication :
mysql> SHOW MASTER STATUS
mysql> SHOW SLAVE STATUS
mysql> SHOW MASTER LOGS
Si la réplication ne s'effectue pas, vous pourrez trouver les erreurs dans le fichier error du serveur esclave. A partir du moment que le serveur esclave commence à répliquer, vous trouverez un fichier master.info au même endroits que le fichier d'erreur. Ce fichier permet d'effectuer un tracking des données déjà répliquées et à quels moments. Ne supprimer pas ce fichier.
Contributeur : Eric Romang