Assumindo uma replicação mista de replicação baseada em instrução e replicação baseada em linha no MySQL 5.5. Como exatamente isso funciona em um cenário mestre-mestre?
O mestre que recebe a consulta executa e, em seguida, grava a instrução no log binário, que é retransmitida para o escravo para execução? Ou o mestre simplesmente escreve o que deve ser atualizado e então o escravo pega as alterações?
Também afirma que no MySQL 5.5 SBR é o padrão, mas muda para RBR quando necessário. Como sei quando é necessário? Existe uma maneira de forçá-lo a usar SBR para apenas uma consulta UPDATE ou INSERT?
Não há nada de especial na replicação mestre/mestre no MySQL - é mestre/escravo bidirecional, onde cada servidor é apenas um escravo do outro servidor. Caso contrário, ele se comporta exatamente como uma topologia mestre/escravo "normal". Existem algumas sugestões sobre como proteger essa configuração de chaves primárias duplicadas, como definir um
auto_increment_offset
eauto_increment_increment
, gravar apenas em um mestre (executar ativo/passivo) e garantir quelog_slave_updates
esteja definido.Portanto, mestre/mestre é apenas mestre/escravo em duas direções. Sua próxima pergunta é sobre como a replicação funciona em geral, para a qual você deve ler isto: Detalhes de implementação de replicação .
Resumindo:
Você pode ver o thread de I/O e o thread SQL ativos em SHOW SLAVE STATUS e também na lista de processos.
No MySQL 5.5, o padrão é a replicação baseada em instrução. (Consulte Formatos de replicação )
O que você está se referindo é o formato de log binário misto , que normalmente usará SBR, mas mudará para RBR em várias circunstâncias em que SBR não é considerado seguro porque há potencial para a instrução ter resultados diferentes no mestre e no escravo. Esses são descritos claramente na documentação.
Como SBR é o padrão, para usar MIXED, você deve defini-lo explicitamente
my.cnf
para uma alteração persistente:ou dinamicamente executando
Se você deseja definir o
binlog_format
para uma instrução específica, pode definir binlog_format na sessão (como mostrado acima) e, em seguida, executar sua instrução. No entanto, você precisa ter o privilégio SUPER para fazer isso, o que nenhum aplicativo deveria ter. Realmente, exceto para certas tarefas administrativas, quase não há razão para fazer isso e a replicação MISTA deve ser sua escolha.