Hypothèses

Soient deux mysqld fraichement installés, sans data donc.

But

Mettre en oeuvre une réplication croisée de type master/master :

  1. sgbd01 == MASTER01/SLAVE02
  2. sgbd02 == MASTER02/SLAVE01

Sur MASTER01/SLAVE02

Sur une debian par exemple on ajoute les paramètres suivants au fichier /etc/mysql/conf.d/replication.cnf:

[mysqld]
server-id=1
auto-increment-increment = 20 # à ajuster /!\
auto-increment-offset = 1     # à ajuster /!\
log-bin=/var/log/mysql/mysql-bin
max_binlog_size=50M
replicate-ignore-db=mysql
expire_logs_days=3

On stop relance le mysqld complet (pas de simple reload):

/etc/init.d/mysql stop
/etc/init.d/mysql start

Avec le client mysql :

mysql> grant REPLICATION SLAVE,\
SELECT,\
SUPER,\
RELOAD\
on *.* to 'repl'@sgbd02 \
identified by 'passreplication';
mysql> CHANGE MASTER TO \
MASTER_HOST='sgbd02',\
MASTER_USER='repl',\
MASTER_LOG_FILE='mysqlmaster02-bin.000001',\
MASTER_PASSWORD='passreplication';
mysql> start slave;

Sur MASTER02/SLAVE01

Toujours sur une debian par exemple on ajoute les paramètres suivants au fichier /etc/mysql/conf.d/replication.cnf :

[mysqld]
server-id=2
auto-increment-increment = 20 # à ajuster /!\
auto-increment-offset = 2     # à ajuster /!\
log-bin=/var/log/mysql/mysql-bin
max_binlog_size=50M
replicate-ignore-db=mysql
expire_logs_days=3

On stop relance le mysqld complet (pas de simple reload):

/etc/init.d/mysql stop
/etc/init.d/mysql start

Avec le client mysql :

mysql> grant REPLICATION SLAVE,\
SELECT,\
SUPER,\
RELOAD\
on *.* to 'repl'@sgbd01 \
identified by 'passreplication';
mysql> CHANGE MASTER TO \
MASTER_HOST='sgbd01',\
MASTER_USER='repl',
MASTER_LOG_FILE='mysqlmaster01-bin.000001',\
MASTER_PASSWORD='passreplication';
mysql> start slave;

Checks

Normalement la commande :

mysql> show slave status\G;

Devrait renvoyer pas mal de choses dont :

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Tant que ces deux lignes ne sont pas à Yes : same player shoot again.

Debug tip

Quand :

mysql>show slave status\G;

contient la ligne :

Slave_IO_Running: No

alors la commande suivante est la bienvenue :

mysql> reset slave;

Good to know

  • /!\ Attention Le pass de réplication ne doit pas faire plus de 16 caractères /!\
  • Pour ceux qui aiment avoir une couche supplementaire qui simplifie les choses.
  • Et puis on ne le repetera jamais assez mais il y a des gens biens qui ont fait des tools bien pratiques (je vous laisse coma dessus).
bazaar/mysql_master_master.txt · Last modified: 2010/02/19 15:23 by beorn