Réplication MYSQL

2016oct.09

La réplication Mysql, vous permet de synchroniser un ou plusieurs serveurs esclaves (slave) par rapport à un serveur maître. Cela a plusieurs intêrets allant de la création d’une infrastructure haute disponibilité à un système de sauvegarde. La partie qui m’intéresse aujourd’hui est la création d’un serveur de backup permettant d’être esclave de plusieurs serveurs maitre.

Installation du serveur esclave mysql

L’installation du serveur esclave mysql est simple puisqu’il s’agit d’une installation classique. Nous allons par contre démarrer plusieurs instances afin de cloisonner nos réplications.

Je pars du principe que l’instance initiale de Mysql ne sera pas utilisée et que pour chaque serveur maître, j’aurai donc une instance slave sur mon serveur de backup.

Pour créer une instance slave :

mysql_install_db --user=mysql --datadir=/var/lib/mysql1

Nous aurons donc les données de base pour démarrer notre instance mysql1.

Afin de compléter l’installation, je copie le dossier de configuration /etc/mysql/ vers /etc/mysql1/. Cela permet d’avoir une configuration simple et unique de chaque instance. Et notamment sous Debian, puisque nous avons le fichier debian.cnf qui contient le user debian-sys-maint qui est l’utilisateur permettant d’effectuer diverses vérifications au lancement du serveur. Hors dans le cas d’une réplication, cet utilisateur aura un mot de passe différent sur chacune des instances.

Il conviendra de modifier différents paramètres dans le fichier main.cf avec notamment :

  • datadir : /var/lib/mysql1
  • log_bin : en indiquant un nom de fichier spécifique pour mysql1

et dans le fichier debian-start en modifiant le chemin de configuration pour pointer vers /etc/mysql1

Une fois cette étape réalisée, il reste à modifier le fichier /etc/init.d/mysql :

cp /etc/init.d/mysql /etc/init.d/mysql1
sed -i -e 's/etc\/mysql\//etc\/mysql1\//' /etc/init.d/mysql1
update-rc.d mysql1 defaults

Installation du serveur maître

L’installation du serveur maître est beaucoup plus simple :

  • activer les logs binaires dans /etc/mysql/my.cnf
    • log_bin = /var/log/mysql/mysql-bin.log
  • indiquer le server-id
    • server-id = 1
  • autoriser les connexions distances (si besoin configurer votre pare-feu)
    • bind-address = 0.0.0.0
  • créer l’utilisateur pour la réplication
    •  grant replication slave on *.* to ‘NOM_UTILISATEUR’@’ADRESSE_SERVEUR_ESCLAVE’ identified by ‘MOT_DE_PASSE’;

Lancer une sauvegarde complète des bases et copier là vers le serveur de sauvearde

mysqldump --defaults-file=/etc/mysql/debian.cnf --all-databases --master-data > all.sql
scp all.sql USER@SLAVE:all.sql

Lancement de la réplication

Pour lancer la réplication, importer la base précédement transmise sur votre serveur esclave puis démarrer la réplication.

Commentaires