Quando temos uma replicação envolvendo mais de 1 servidor master temos que tomar o cuidado para que a replicação não pare de funcionar, e o primeiro problema que qualquer DBA enfrenta é o erro de chave primária duplicada.
Variáveis que devem ser configuradas em todos os servidores Master.
Porém é muito simples e fácil não passar por esse problema.
Temos 2 variáveis fundamentais e é muito simples a sua correta configuração.
Obs: O que eu mais vejo por ai é configurado da forma errada, ou configurada no chute, sem entender a forma correta de usar
Variável | Descrição |
---|---|
auto_increment_increment | Define o intervalo de valores das colunas auto_increment, o salto que o auto_incremtn vai precisar fazer para que não tenha valores duplicados. O valor aqui, deve ser pelo menos a quantidade de servidores Master que a replicação for ter, se for uma replicação Master-Master, o valor deve ser pelo menos 2, se for uma replicação circular o valor deve ser pelo menos igual a quantidade de servidores que estão na replicação |
auto_increment_offset | Define o valor inicial da colune auto_incremet_offset. O seu valor deve ser informado seguindo uma sequência iniciando por 1(não é uma regra, mas é mais fácil pensa assim para que não exista furos e venha ocorrer uma quebra na replicação pelo duplicação do valor de uma chave primária) até a quantidade de servidores Master que a replicação possui. |
Vamos supor que temos uma infraestrutura com 3 servidores MySQL, vamos chamar de A, B e C. Eles estão configurados com uma replicação em formato de circular, onde todos serão Masters ou seja, teremos escrita em todos os servidores.
A -> B -> C -> A
O valor da variável auto_increment_increment sempre será o número de servidores masters que fazem parte da replicação, e o valor da variável auto_increment_offset será diferente em todos os servidores e o seu valor é sequencial, começando pelo número 1.
Servidor A
Servidor B
Servidor C
Com essa configuração você não terá mais problemas de colunas auto_increment tendo valores duplicados em diferentes servidores.
Obs: Para uma replicação em anel, não é apenas essa configuração que é necessária, fique atento a isso, veja também sobre a variável log_slave_updates.