Replicação MySQL para cenário de fallback
-
08-06-2019 - |
Pergunta
Quando eu tenho dois servidores mysql que têm trabalhos diferentes (mantendo bancos de dados diferentes), mas quero poder usar um deles para entrar quando o outro falhar, o que você sugeriria como eu mantenho os dados em ambos iguais "fechar para tempo real"?
Obviamente não é possível fazer um dump completo do banco de dados a cada x minutos.
Eu li sobre o Registro Binário, é esse o caminho que preciso seguir?Isso não desacelerará muito o servidor substituto?Existe uma maneira de não incluir algumas tabelas no log binário - onde não importa que os dados tenham sido alterados?
Solução
O log binário é definitivamente o caminho a percorrer.No entanto, você deve estar ciente de que com MySQL você não pode simplesmente alternar entre servidores assim.
Um servidor será o mestre e o outro será o escravo.Você escreve/lê no mestre, mas só pode ler no servidor escravo.Se você escrever para o escravo, eles ficarão fora de sincronia e não haverá uma maneira fácil de sincronizá-los novamente (basicamente, você terá que trocá-los para que o mestre seja o novo escravo, mas este é um processo manual tedioso ).
Se você precisar de bancos de dados de backup verdadeiramente hot-swap, talvez seja necessário usar um sistema diferente do MySQL.Se tudo o que você deseja é um backup ao vivo somente leitura que possa ser usado instantaneamente no pior cenário (o mestre é permanentemente destruído), o Log Binário será adequado para você.
Outras dicas
Você pode querer considerar o mestre-mestre cenário de replicação, mas com uma ligeira variação.Você pode especificar quais bancos de dados serão replicados e limitar a replicação para cada servidor.
Para server1 eu adicionaria --replicate-do-db=server_2_db
e no servidor2 --replicate-do-db=server_1_db
para o seu my.cnf (ou my.ini no Windows).Isso significaria que apenas as instruções para server_1_db seriam replicadas para server2 e vice-versa.
Certifique-se também de realizar backups completos regularmente e não confiar apenas na replicação, pois isso não oferece segurança contra backups acidentais. DROP DATABASE
declarações ou algo parecido.