Qual é a melhor maneira de alterar o esquema de replicação de 2 escravos atualmente replicados?

Qual é a melhor maneira de alterar o esquema de replicação de 2 escravos atualmente replicados?

Tenho a replicação do MySQL configurada em produção da seguinte maneira:

DB1 -> DB2
DB1 -> BAK

Para onde DB2e BAKsã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 DB2e 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:

http://dev.mysql.com/doc/refman/5.0/en/replication-options-slave.html#option_mysqld_log-slave-updates

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.

informação relacionada