Que formato de log binário usar para a Replicação do MySQL?

6

Estou prestes a começar a usar a replicação do MySQL e estou imaginando que tipo de formato de log bin é o melhor para usar? Há Row, Statement e Mixed.

Eu vou estar usando 5.1.49.

A linha está ganhando no momento, mas só estou me perguntando por que devo usar o misto em vez da linha.

Muito obrigado,

Delenda

    
por delenda 14.12.2010 / 18:32

1 resposta

8

A replicação baseada em declarações é a mais rápida e mais compacta, mas em algumas circunstâncias pode produzir resultados diferentes (não determinísticos) em escravos do que no mestre, resultando em inconsistência. Um exemplo pode ser:

UPDATE mytable SET a = a + 1 LIMIT 1;

Não há como garantir qual linha será atualizada, pois não há ordem de classificação e a ordem no disco não é previsível nem consistente.

A replicação baseada em linha evita esse problema replicando os dados alterados em vez das consultas, mas considerando uma declaração como:

UPDATE mytable SET a = a + 1;

requer a replicação de apenas alguns bytes para a replicação baseada em instruções, independentemente de quantas linhas ela afetar: se atualizar 1 milhão de linhas, a replicação baseada em linha replicará todas as 1 milhão de linhas, o que será muito mais lento e criará binário muito maior registros.

O modo misto alterna entre os dois, usando o que for mais eficiente ou seguro (por exemplo, inserções simples provavelmente são feitas da melhor maneira pela replicação baseada em linha - o uso de instruções pode ser mais lento). A oportunidade para problemas vem em reconhecer quais afirmações são não-determinísticas, o que é um problema não trivial.

Em resumo:

  • Baseado em linha: sempre seguro, possivelmente muito lento e ineficiente em tempo e espaço
  • Baseado em declarações: nem sempre é seguro, mas pode ser muito mais rápido
  • Modo misto: o melhor dos dois mundos, em teoria, mas que poderia dar errado, resultando em desempenho lento ou em dados errados, dependendo de como ele se engana!

Os documentos oficiais são aqui .

Esta é também uma questão antiga: você deve estar usando o MySQL 5.5 para qualquer nova compilação agora. Eu prefiro as construções de Percona.

    
por 14.02.2012 / 10:24