MySQL et la réplication
Préambule
Je viens de mettre en place la réplication entre Bashful (Situé à BHS au Canada), et Grumpy (Toujours à RBX en France) ; Ce billet vos plus de note rapide que de vérité sur la mise en place de deux serveur de réplication ! Ça je verrais à l’usage.
J’ai trouvé sur la toile, plusieurs ressources, mais aucune qui semble expliquer comment faire une réplication simple, basique et claire ; ça j’espère le faire ici 🙂
Les serveurs
Grumpy : Serveur maître
- Version du système d’exploitation : Debian 7.0 (Wheezy)
- Version Mysql : 5.5.31, for debian-linux-gnu (x86_64)
- Version PhpMyAdmin : 4 (nightly 2013-05-20)
- Bases de données : Plusieurs déjà en place
Bashful : Serveur esclave
- Version du système d’exploitation : Debian 6.0 (Squeezy)
- Version Mysql : 5.5.31, for debian-linux-gnu (x86_64)
- Version PhpMyAdmin : 3.x
- Bases de données : Aucune, mise à part les bases d’origines
Configuration des serveurs
Grumpy : Serveur maître
Modifier le fichier « /etc/mysql/my.cnf » :
1 2 3 4 5 6 7 8 | # Le serveur étant sur le VPN, je n'autorise les connexions que depuis l'adresse IP VPN de Grumpy. # Fait intéressant : Les connexions locales ne sont pas affectées, car utilise la socket locale. bind-address = 192.168.59.1 # Nommer le serveur (Ici : 1) server-id = 1 # Activer les log, et spécifier l'emplacement log_bin = /var/log/mysql/mysql-bin.log |
Rebooter le daemon mysql :
1 | # sudo service mysql restart |
Pour finaliser la configuration du serveur, il faut ce connecter à PhpMyAdmin, dans le menu en haut, choisir « Replication », normalement vous avez trois options :
- Show master status
- Show connected slaves
- Add slave replication user
Choisissons le troisième « Add slave replication user » :
- Username : replication
- Host : Use text field : <ip vpn de bashful>
- Password : Thatsasecretbitch
- Re-type : Thatsasecretbitch
Et on valide notre utilisateur de réplication !
Bashful : Serveur esclave
Modifier le fichier « /etc/mysql/my.cnf » :
1 2 | # Nommer le serveur (Ici : 2) server-id = 2 |
Rebooter le daemon mysql :
1 | # sudo service mysql restart |
Pour finaliser la configuration du serveur, il faut ce connecter à PhpMyAdmin, dans le menu en haut, choisir « Replication », cette fois-ci, pas de configuration pour dire que le serveur est configuré pour être maître, on va donc cliquer sur le bouton « configure » dans la partie « Slave replication » :
- Username : replication
- Password : Thatsasecretbitch
- Host : <ip vpn de Grumpy>
- Port : 3306 (Sauf s’il est différent chez vous)
Go
… à ce stage le liens est fait, si tous c’est correctement déroulé.
Note : à l’écriture de ce billet, j’en suis à peut prêt ici, le reste je spécule est je test, j’ai commencé le billet, car la partie synchronisation est un peu longue pour moi –> normale / anormale ; logique / illogique : tant de questions sans réponses 🙂
Synchroniser les bases déjà présentes
Avec les options proposées par PhpMyAdmin
Et oui, j’ai des bases sur Grumpy à synchroniser sur Bashful, pour cela je me met sur Bashful (Esclave, donc), dans Replication (Menu du haut), puis je clique sur le choix « Synchroniser les bases de données avec le serveur maître », je coche les deux cases :
- Structure
- Données
et lance la synchronisation…
… Pour le reste, il va falloir bidouiller 🙂 Si j’y pense, je reviens sur ce billet !
Au final, je suis convaincus que cette solution est très bien pour des petites synchronisation (très petite), moi ça n’a pas fonctionné, j’ai donc utilisé la solution suivante :
Avec une synchronisation à froid
Problème : Il va falloir stopper le serveur maître (Grumpy) quelques minutes.
- Éteindre le serveur esclave (Bashful)
- Supprimer le dossier /var/lib/mysql/ (rm -r /var/lib/mysql)
- Éteindre le serveur maître
- Supprimer les fichiers dans /var/log/mysql/ (rm /var/log/mysql/*) [Il s’agit du dossier par défaut où sont stockés les log binaire, défini dans la configuration de Grumpy]
- Copier le dossier /var/lib/mysql (Depuis Grumpy vers Bashful) [Par quelques solutions de copie : tar / rsync / …]
- Ouvrir le fichier « /etc/mysql/debian.cnf » sur les deux serveurs, et recopier le mot de passe (2 fois), depuis le maître, vers l’esclave ; sans quoi Debian ne va pas être content.
- Relancer les serveurs (Peut-importe l’ordre)
- Reconfigurer Bashful, comme serveur esclave (Voir chapitre « Configuration des serveurs » > « Bashful : Serveur esclave » ci-dessus)
- Sur le PhpMyAdmin de Bashful, cliquer sur Replication (Menu du haut), puis cliquer sur le choix « Control slave server » puis « Start completly »
Tests de réplication
La partie la plus simple (Bien qu’au final ce ne soit pas très compliqué) : créer, supprimer, ajouter, modifier ; tables, données, et tous ce que vous voulez sur le serveur maître.
Elles sont maintenant synchronisé, vous pouvez éteindre le serveur esclave pour faire une sauvegarde à froid, et le relancer, il va rejouer les logs binaires, là où ils les avaient laissés.