Por padrão, um processo mysqld não pode escutar simultaneamente dois Mestres diferentes.
O comando CHANGE MASTER TO só permite que você defina um mestre como fonte para ler.
Para emular isso, você teria que alternar entre os dois mestres programaticamente. Como você faz isso?
Aqui está a ideia básica
- Master M1
- Mestre M2
- Escravo S1
Configura a replicação de M1 para S1 e depois M2 para S1 como este
- 1) Faça S1 executar CHANGE MASTER TO com M1 como a Fonte
- 2) START SLAVE;
- 3) Execute a replicação por pouco tempo
- 4) PARAR ESCRAVO;
- 5) Faça o S1 executar CHANGE MASTER TO com M2 como a Fonte
- 6) INICIAR ESCRAVO
- 7) Execute a replicação por pouco tempo
- 8) PARE ESCRAVO
- 9) Voltar para o Passo 1
Cada vez que você muda de um mestre para outro, você deve gravar dois valores de SHOW SLAVE STATUS\G
- Relay_Master_Log_file
- Exec_Master_Log_Pos
Esses dois valores representam a última declaração SQL que veio do mestre e estava próxima de ser executada no escravo.
Há uma grande precaução: enquanto o M1 e o M2 estiverem atualizando bancos de dados mutuamente exclusivos, esse algoritmo deve ser perfeito.