MYSQL: Rotina para replicação de dois masters

De Wiki Hackstore

Adicione os seguintes parâmetros à seção [mysqld] do my.cnf dos servidores:

bind-address               = 0.0.0.0
log-bin                    = <nomeDoHost>-bin
relay-log                  = <nomeDoHost>-relay-bin
server-id                  = <idDoHost>
replicate-ignore-db        = mysql
auto_increment_increment   = 3
auto_increment_offset      = <idDoHost>

O <idDoHost> deve ser 1 ou 2 no master1 ou master2. Reinicie os dois servidores depois de fazer isso.

Crie os usuários de replicação no master1:

mysql@master1> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'master2' IDENTIFIED BY 'ddd001';
mysql@master2> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'master1' IDENTIFIED BY 'ddd001';

Trave a gravação, veja o status atual do bin-log no master1

mysql@master1> FLUSH TABLES WITH READ LOCK;
mysql@master1> SHOW MASTER STATUS;

Guarde as informações do "SHOW MASTER STATUS". Mantenha a seção atual do MySQL aberta.

Com a seção anterior ainda aberta, tire uma cópia do DB atual

root@master1# tar -cvf /tmp/mysql-snapshot.tar .

Destrave a seção travada

mysql@master1> UNLOCK TABLES;

Instale a versão antiga no servidor escravo

root@master2# tar -xvf mysql-snapshot.tar -C /var/lib/mysql

Configure o master2 para copiar tudo do master1

mysql@master2> CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='repl', MASTER_PASSWORD='ddd001', MASTER_LOG_FILE='<MASTER1-FILE>',  MASTER_LOG_POS=<MASTER1-POS>;
mysql@master2> START SLAVE;

Os campos MASTER1-FILE e MASTER1-POS você pega do show master acima.

Configure o master1 para copiar tudo do master2

mysql@master2> SHOW MASTER STATUS;
mysql@master1> CHANGE MASTER TO MASTER_HOST='master2', MASTER_USER='repl', MASTER_PASSWORD='ddd001', MASTER_LOG_FILE='<MASTER2-FILE>',  MASTER_LOG_POS=<MASTER2-POS>;

Fim!

Agora já é possível usar o master2 normalmente.


fonte: http://dev.mysql.com/doc/refman/5.0/en/replication.html