Tag archives for slave

Replication facile de base mysql master/slave

Comment effectuer simplement une replication mysql master slave? Quelques règles vont vous permettre d’atteindre l’objectif visé.

Dans la configuration des deux serveurs, tout d’abord, il faut avoir les mêmes fichiers de configuration my.cnf, à une différence près: dans la section mysqld, il faut un champs server_id, qui soit un entier, différents sur le master et le slave. Si vous avez plusieurs slave, ce champs doit aussi être différent d’un slave à l’autre.
Il faut aussi avoir activer les logs binaires afin de rejouer les opérations faites sur le master sur le slave
Par exemple, sur le master:

[mysqld]
log-bin=mysql-bin
server_id=1

Et sur le slave:

[mysqld]
log-bin=mysql-bin
server_id=2

Attention, il faut bien entendu que les process mysql écoutent sur le réseau ce qui n’est pas le cas par défaut…

On démarre les deux process mysql. Sur debian, par exemple:

/etc/init.d/mysql start

Si ce sont de nouvelles machines, avec une ancienne base, on importe le dump de la base. Attention, il faut avoir fait le dump de la base uniquement à répliquer, pas le dump de toutes les bases, car sinon au moment de l’import, vous allez écraser votre base mysql, ce qui pourrait être fâcheux.

La commande est la suivante, à passer sur le master et le slave.

mysql -uadmin -p < dump.sql

Dans le master, au moins, il faut créer un utilisateur qui va avoir le droit de se connecter, avec les droits de réplication, et les droits de réplication uniquement:

mysql> CREATE USER 'repluser'@'slave.example.com' IDENTIFIED BY 'replpassword';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'slave.example.com';

où slave.example.com est le hostname (fqdn) du slave.
Je conseille de faire l'opération symétrique dans le slave afin de pouvoir inverser les rôles plus aisément.

Afin de synchroniser les opérations en master et slave, il faut interrompre les opérations d'écriture quelques instants sur le master, afin de connaître la position du master dans les logs binaires:

mysql> FLUSH TABLES WITH READ LOCK;

Puis on passe la commande qui indique cette position:

mysql> SHOW MASTER STATUS;

Cette commande donne un fichier de log en cours et une position. Noter ce résultat à garder précieusement. Attention à ne pas sortir de la session mysql, pour ne pas lever le lock tant que la réplication n'est pas en service côté slave

Démarrons la réplication sur le slave...
Il faut d'abord s'assurer qu'elle n'est pas déjà en cours:

mysql> STOP SLAVE;

Et configurons la replication avec les informations serveurs (user défini plus haut, fichiers de log en cours, et position) et la commande "CHANGE MASTER":

mysql> CHANGE MASTER TO MASTER_HOST='master.example.com', MASTER_USER='repluser', MASTER_PASSWORD='replpassword', MASTER_PORT=3306, MASTER_LOG_FILE="mysql-bin.000001", MASTER_LOG_POS=106;
mysql> START SLAVE;

où master_log_file et master_log_pos sont les résultats de la commande show master status.

La réplication est maintenant en oeuvre.
Sur le master, vous pouvez sortir de votre session mysql, ou passer la commande:

mysql> unlock tables;

N'oubliez pas de faire des tests d'insertion et de suppresion de donnée pour vérifier que cela fonctionne.

Posted in mysql, open-source | 2 Comments

Swedish Greys - a WordPress theme from Nordic Themepark.