Nós atualizamos os servidores mysql em ambas as máquinas para o 5.0.91 e está funcionando agora. Aparentemente 5.0.32 & 5.0.33 são bastante bugs, e replicação no mysql começou a suavizar em torno de 5.0.70 ou mais.
Estou configurando uma replicação master-master mysql em dois servidores (db1 e db2). Eu comecei com a configuração do db2 como um escravo para db1 e que funciona bem. Mas quando eu configuro o db1 como um escravo para o db2 ele não está replicando.
Na verdade, tudo parece bem, mas os dados não estão sendo replicados. Não há erros em nenhum dos logs de erros. O status do escravo está atualizando a posição do log da bandeja. Eu usei mysqlbinlog para examinar tanto o log binário no db2 e o log de retransmissão no db1 e todas as consultas estão indo lá, mas não sendo executado para db1.
"show slave status" em ambos os servidores mostra que tanto o escravo io quanto os threads sql são "Yes" e que a posição do log de relay é atualizada pelo thread sql.
Também nos dois servidores:
>echo "show processlist" | mysql | grep "system user"
166819 system user NULL Connect 3655 Waiting for master to send event NULL
166820 system user NULL Connect 3507 Has read all relay log; waiting for the slave I/O thread to update it NULL
Configuração relevante para db1:
server-id = 1
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 4
auto_increment_offset = 1
master-host = db2
master-port = 3306
master-user = slaveuser
master-password = ***
skip-slave-start
sync_binlog = 1
binlog-ignore-db=mysql
Config para o db2
server-id = 2
log-slave-updates
replicate-same-server-id = 0
auto_increment_increment = 4
auto_increment_offset = 2
master-host = db1
master-port = 3306
master-user = slaveuser
master-password = ***
sync_binlog = 1
relay-log=mysql-relay-bin
binlog-ignore-db=mysql
O que mais eu posso procurar para garantir que o db1 execute as consultas do db2?
Suas configurações não parecem completas - você tem 'log-bin = mysql-master-bin' (sic) em algum lugar em ambas as configurações? Em geral, a replicação de um mestre para um escravo (qualquer direção) se parece com:
mysql - > binlog principal - > (rede para escravo) - > relé de escravo - > escravo
Você precisa fazer isso nas duas direções; se você não estiver registrando transações no db2, não haverá nada para enviar de volta ao db1. Então, basicamente, assegure-se de configurar log-bin e relay-log nos dois servidores.
Você não precisa de atualizações log-slave, que são usadas para encadeamento (master - > slave - > slave). Seria útil se você anexasse um terceiro escravo da configuração dual-master para fazer o backup, por exemplo. Como você nunca enviará db1- > db2- > db1 (loop inválido) é um registro inútil.
Tags mysql replication