Replication de base MySQL sur 2 serveurs

Le but de cet article est d’avoir 2 serveurs MySQL synchronisés. Par la suite, je mettrais en place un système de sauvegarde à froid du serveur Slave, on pourra donc laisser notre serveur principal tourné H24, sans interruption de service.
Pré requis :

  • 2 serveurs MySQL 😉

J’utilise dans cet article 2 serveurs qui tournent sous Ubuntu 9.10. Le premier qui sera le serveur principal a pour IP 192.168.224.129 et le second utilise l’adresse 192.168.224.130. Toutes les commandes effectuées dans cet article se font avec l’utilisateur root.

On commence par configurer le serveur maître, pour cela on édite le fichier ‘my.cnf’.

vi /etc/mysql/my.cnf

Il faut décommenter cette partie dans le fichier, c’était entre les lignes 90/95 chez moi :

server-id=1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=syncdb #nom de la db à synchroniser

Il faut penser aussi à modifier la ligne :

bind-address            = 0.0.0.0

Une fois ces modifications apportées, il faut redémarrer le service MySQL.

/etc/init.d/mysql restart

Ensuite, on se connecte au serveur MySQL pour ajouter un utilisateur pour la synchronisation.

mysql -u root -p
STOP SLAVE;
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slavepass';
FLUSH PRIVILEGES;
CREATE DATABASE syncdb;
USE syncdb;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

SHOW MASTER STATUS

On passe maintenant à la configuration du second serveur, celui qui aura le rôle de « slave ». On va donc éditer le fichier ‘my.cnf’.

vi /etc/mysql/my.cnf

Entre la ligne 90/95, on modifie ou on ajoute les informations suivantes :

server-id = 2
master-host = 192.168.224.129
master-user = slave
master-password = slavepass
master-connect-retry = 60
replicate-do-db = syncdb

my.cnf slave

On redémarre le service MySQL :

/etc/init.d/mysql restart

On se connecte à la console MySQL :

mysql -u root -p
STOP SLAVE;
CREATE DATABASE syncdb;
CHANGE MASTER TO MASTER_HOST='192.168.224.129', MASTER_USER='slave', MASTER_PASSWORD='slavepass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;
START SLAVE;
quit;
mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.224.129
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-relay-bin.000006
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: syncdb
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 407
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0,00 sec)

On peut voir que tout est ok ;).

On peut tester maintenant, on va créer un table sur le ‘Master’.

mysql> create table test( id int);
Query OK, 0 rows affected (0,07 sec)
 
mysql> show tables;
+------------------+
| Tables_in_syncdb |
+------------------+
| test             | 
+------------------+
1 row in set (0,00 sec)

On peut va vérifier si notre table est présente sur le ‘Slave’ :

mysql> use syncdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> show tables;
+------------------+
| Tables_in_syncdb |
+------------------+
| test             | 
+------------------+
1 row in set (0,00 sec)

Notre table est bien présente sur notre serveur ‘Slave’. On peut donc dire que l’objectif est atteint 😀

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.