Tenho a replicação do MySQL configurada em produção da seguinte maneira:
DB1 -> DB2 DB1 -> BAK
Para onde DB2
e BAK
são escravos DB1
. Todos os 3 servidores estão sincronizados (0 segundos atrás do mestre) e possuem mais de 30 GB de dados.
Gostaria de colocar os servidores em uma nova configuração mestre-escravo da seguinte forma:
DB1 -> DB2 -> BAK
Qual é a melhor maneira de ativar o host mestre BAK
?
Existe uma maneira de evitar ter que interromper o thread escravo DB2
e obter um mysqldump por BAK
(processos de 5 a 6 horas)?
Responder1
Eles chamam isso de replicação em cascata mestre-escravo-escravo. Você precisa habilitar log-bin e log-slave-updates no DB2, veja aqui:
Uma vez executado no BD2, no BAK você precisa alterar o mestre e redefinir o escravo para liberar suas informações de log, ala:
mysql> stop slave;
mysql> change master to MASTER_HOST="BAK name or IP", .....
mysql> reset slave;
mysql> start slave
Onde '...' são as opções normais de:http://dev.mysql.com/doc/refman/5.0/en/change-master-to.html
Em teoria, isso deveria fazer isso para você sem ter que fazer um novo dump e importá-lo - eu me certificaria de executar um flush de logs no master e fazer backups do BAK se você quiser, caso algo dê errado ao obter seu log posições erradas ou algo assim...
Responder2
Como você disse, o despejo e a importação podem levar uma eternidade. Uma opção muito melhor é usarxtrabackup, que fará uma restauração tão rápido quanto puder copiar os arquivos no lugar.Eu bloguei sobre issoum tempo atrás. Acho que é uma maneira perfeita de configurar escravos, muito rápida e fácil. Os backups demoram muito, mas as restaurações são muito rápidas. Eu também recomendo fortemente que você useporcozem vez de gzip, se você estiver compactando seus backups - isso facilmente fez uma diferença de 4 vezes nos meus tempos de backup.
Se você puder parar ambos os escravos ao mesmo tempo (para que ambos apontem para o mesmo log e posição no db1), por exemplo, parando o DB1 momentaneamente, então você poderá apontar novamente o BAK no DB2 com segurança usando suas informações mestre sem necessidade para fazer uma restauração demorada. Como diz troyengel, o mais importante é que você precisa de log-slave-updates para fazer a retransmissão, caso contrário, apenas as instruções originadas no DB2 serão enviadas para o BAK.
Eu também recomendo que você configure o DB2 como somente leitura. Isso não afetará a replicação, mas é mais seguro, pois você não terá dados no DB2 e BAK que não estejam no DB1.