MySQL

De Wiki Automatisme et Informatique.

SERVEUR1:

Ajouter ce qui suit à la section [mysqld] du fichier my.cnf et redémarrer mysqld:

# primary master server id
server-id=1
auto_increment_offset=1
# total number of master servers
auto_increment_increment=2
# local slave replication options
log-bin=master1-bin
log-slave-updates
# remote master replication options
master-host=ip-serveur2
master-port=3306
master-user=slave
master-password=password_slave
master-connect-retry=10 


SERVEUR2:

Ajouter ce qui suit à la section [mysqld] du fichier my.cnf et redémarrer mysqld:

# secondary master server id
server-id=2
auto_increment_offset=2
# total number of master servers
auto_increment_increment=2
# local slave replication options
log-bin=master2-bin
log-slave-updates
# remote master replication options
master-host=ip-serveur1
master-port=3306
master-user=slave
master-password=password_slave
master-connect-retry=10 

sur SERVEUR1 et SERVEUR2

ne pas oublier de decommenter :

#bind addresse =0.0.0.0

dans le fichier my.cnf

connexion mysql :

mysql -u root -p
Mysql> USE mysql;
Mysql> INSERT INTO user (Host, User, Password, Select_priv, Reload_priv, Super_priv, Repl_slave_priv) VALUES ('Any', 'slave user', password('slave password'), 'Y', 'Y', 'Y', 'Y');
Mysql> FLUSH PRIVILEGES;
/etc/init.d/mysql restart


Réplication sur SERVEUR2 (SERVEUR1 -> SERVEUR2):

Sur SERVEUR1:

pour repartir avec des index les plus bas :

mysql> reset master;
mysql> SHOW MASTER STATUS\G
File: master1-bin.000001
Position: 254
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.20 sec) 

Bien noter : File et position

Sur SERVEUR2:

mysql> CHANGE MASTER TO
MASTER_HOST='ip-serveur1',
MASTER_USER='slave',
MASTER_PASSWORD='slave_password',
MASTER_LOG_FILE='master1-bin.000001',       -------> le nom file note sur le SERVEUR1
MASTER_LOG_POS=254;			    -------> la position notée sur le SERVEUR1
mysql> LOAD DATA FROM MASTER; 
mysql> START SLAVE ; 


Réplication sur SERVEUR1 (SERVEUR2 -> SERVEUR1):

Sur SERVEUR2:

pour repartir avec des index les plus bas :

mysql> reset master;
mysql> SHOW MASTER STATUS\G
File: master2-bin.000001
Position: 254
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.20 sec) 

Bien noter : File et position

Sur SERVEUR1:

mysql> CHANGE MASTER TO
MASTER_HOST='ip-serveur2',
MASTER_USER='slave',
MASTER_PASSWORD='slave_password',
MASTER_LOG_FILE='master2-bin.000001',       -------> le nom file note sur le SERVEUR2
MASTER_LOG_POS=254;			    -------> la position notée sur le SERVEUR2
mysql> LOAD DATA FROM MASTER; 
mysql> START SLAVE ; 

Vérifier que les réplications fonctionnent :

Sur SERVEUR1:

mysql>show slave status\G
*************************** 1. row ***************************
            Slave_IO_State: Waiting for master to send event
            ...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ... 
            Last_IO_Errno: 0
            Last_IO_Error: 
            Last_SQL_Errno: 0
            Last_SQL_Error: 

Sur SERVEUR2:

mysql>show slave status\G
*************************** 1. row ***************************
            Slave_IO_State: Waiting for master to send event
            ...
            Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ... 
            Last_IO_Errno: 0
            Last_IO_Error: 
            Last_SQL_Errno: 0
            Last_SQL_Error: 


On peut alors creer ou modifier les bases sur l'un ou l'autre serveur, elles seront répliquées.