Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a melhor maneira de sincronizar dados dinâmicos bidirecionalmente em tempo real usando mysql


Não há muito desempenho a ser obtido replicando seu banco de dados em dois mestres. No entanto, há um pouco de failover bacana se você codificar seu aplicativo corretamente.

A configuração Master-Master é essencialmente a mesma que a configuração Slave-Master, mas tem ambos os Slaves iniciados e uma mudança importante em seus arquivos de configuração em cada caixa.

Mestre MySQL 1:
auto_increment_increment = 2
auto_increment_offset = 1 

Mestre MySQL 2:
auto_increment_increment = 2
auto_increment_offset = 2

Esses dois parâmetros garantem que, quando dois servidores estiverem brigando por uma chave primária por algum motivo, eles não dupliquem e eliminem a replicação. Em vez de incrementar em 1, qualquer campo de incremento automático será por padrão incrementado em 2. Em uma caixa, ele iniciará o deslocamento de 1 e executará a sequência 1 3 5 7 9 11 13 etc. Na segunda caixa, iniciará o deslocamento em 2 e executar ao longo de 2 4 6 8 10 12 etc. A partir do teste atual, o auto-incremento parece pegar o próximo número livre, não aquele que saiu antes.
Ex. Se o servidor 1 inserir os 3 primeiros registros (1 3 e 5) quando o servidor 2 inserir o 4º, será dada a chave de 6 (não 2, que não é utilizada).

Depois de configurar isso, inicie os dois como Slaves.
Então, para verificar se ambos estão funcionando bem, conecte-se às duas máquinas e execute o comando SHOW SLAVE STATUS e você deve observar que tanto Slave_IO_Running e Slave_SQL_Running ambos devem dizer “SIM” em cada caixa.

Em seguida, é claro, crie alguns registros em uma tabela e certifique-se de que uma caixa esteja apenas inserindo chaves primárias de números ímpares e a outra esteja apenas incrementando as de números pares.

Em seguida, faça todos os testes para garantir que você possa executar todos os aplicativos padrão em cada caixa com a replicação para a outra.

É relativamente simples quando está funcionando.
Mas como foi mencionado, o MySQL o desencoraja e aconselha que você tenha certeza de que está atento a esta funcionalidade ao escrever o código de sua aplicação.

Editar: Suponho que seja teoricamente possível adicionar mais mestres se você garantir que os deslocamentos estejam corretos e assim por diante. Você pode, de forma mais realista, adicionar alguns escravos adicionais.