Usar uma configuração mestre-escravo e tirar backups do escravo é uma estratégia bastante padrão com o banco de dados MySQL. O processo de proteger os dados de sobrescrever é abordado durante a fase de recuperação do failover e do failback.
Normalmente, você usaria o servidor escravo B para fazer um backup completo ou incremental do banco de dados ( mysqldump -h serverB --all-databases --lock-tables --other-options
), de maneira consistente, sem afetar o banco de dados mestre com bloqueios durante os despejos. Isso é útil porque o escravo é uma réplica idêntica do mestre.
Primeiro o mestre A é configurado com a diretiva mysql bin-log para tornar a replicação disponível para os escravos B .. e potencialmente C, D etc.
Mas também o slave B está configurado para manter um bin-log de transações. (que normalmente estaria vazio, já que não deveria registrar atualizações de replicação, a menos que você esteja encadeando escravos)
Depois que o serverA falhou, a função de mestre é movida para serverB, e B agora começa a registrar em seu próprio arquivo bin-log. Neste ponto da operação de failover, você desativaria manualmente a replicação de A para B, ( mysql -h serverB -e 'stop slave'
) porque, como mencionou, você deseja proteger B do servidor com falha A .
O que quero dizer com "a função de mestre é movida do servidor A para o servidor B" é que você alteraria seu aplicativo para gravar operações CRUD (criar, substituir, atualizar, excluir) no endereço B do servidor. por exemplo. %código%. Em uma configuração de 2 nós, você também migraria as consultas SELECT, porque não há uma função de somente leitura em cluster distinta da função principal.
Agora é a tarefa sys-admin para trazer A de volta online como um escravo de B.
Se foi uma falha limpa, A é agora algum número de eventos por trás de B, mas o log binário em B contém um registro desses eventos. Assim, você pode reproduzir o log binário masterB no slaveA (ele contém instruções SQL básicas)
Se o servidor A foi completamente destruído, você pode optar por restaurar o mysql para A usando um backup completo tirado de B usando um dump recente ou usando uma ferramenta como o script de innobackex percona do xtrabackup package .
Agora você deve configurar a replicação na direção oposta, para permitir que o slaveA se replique a partir do masterB.
Agora A e B devem ser idênticos. Se você tiver um bom motivo, como o slaveA é uma máquina de especificação muito maior, então você pode alternar a direção de replicação para restaurar a configuração masterA-slaveB.
Outras estratégias para lidar com esse cenário (de failover e failback) incluem MMM , replicação multimestre ou percona replication manager ferramenta (que eu não tentei em produção)