Como posso recriar a replicação do MySQL sem descarregar o master?

6

Nosso banco de dados MySQL cresceu bastante e estou executando com replicação principal. A replicação está quebrada. Eu estou tentando reconstruir o segundo mestre sem congelar o primeiro mestre em fazer um mysqldump. O banco de dados é grande o suficiente para que o despejo esteja demorando algumas horas e não posso ter o banco de dados offline por tanto tempo.

Como posso recriar a replicação do MySQL sem descarregar o mestre?

    
por Chris Edwards 25.05.2012 / 16:41

5 respostas

5

Dê uma olhada no Percona Toolkit . pt-table-checksum pode ajudá-lo a descobrir as tabelas fora de sincronia e você pode usar pt-table-sync posteriormente.

    
por 25.05.2012 / 16:47
3

Adicionando a resposta do @quanta, se você não teve sorte tentando comparar-e-reparar a replicação você pode usar a ferramenta innobackupex que é fornecida com percona xtra-backup ferramenta para fazer uma cópia rápida do seu mestre, que você pode restaurar para o escravo. (demora um pouco para ser executado, mas bloqueia as tabelas por muito menos tempo que um mysqldump )

Basicamente, o innobackupex funciona com as tabelas innodb e myisam e aproveita as implementações subjacentes para melhorar massivamente os tempos de exportação para produzir backups consistentes com um tempo de bloqueio mínimo.

Existe um exemplo de criação de um escravo do mestre no site; link

    
por 25.05.2012 / 17:17
2

A sugestão de Tom H é ótima também. Se você conseguir fazer o Xtra voltar a trabalhar, é muito bom. Eu não tenho certeza do que é melhor neste caso, ajudaria a saber:

Versão do MySQL Tudo InnoDB? All MyISAM? Ou misturado? Se InnoDB, você está usando o arquivo por tabela? Quão grande é grande? (50 GB vs. 500 GB?)

Se por alguma razão você não puder fazer o Xtrabackup funcionar, ou o conselho do @ quanta com as ferramentas pt, você pode ter que ir à velha escola e parar o mysql e copiar o diretório de dados para o escravo, ajustar de acordo e iniciar o backup. Se você está lidando com 100's de GB's e você precisa fazer a cópia pela rede, E você tem multi core / CPU's que você pode querer olhar usando pigz para sua cópia link Isso nos ajudou onde estava levando 4,5 horas para copiar o arquivo de despejo, OU o diretório, reduzindo para 2 horas.

Boa sorte, eu sei como isso pode ser estressante.

    
por 25.05.2012 / 18:38
1

Se a partição mysql estiver em um LVM, você pode mylvmbackup . Vai tirar uma foto e também salvará as coordenadas. A maneira mais rápida de reconstruir o mysql é usar o backup do diretório de dados. Você pode então executar uma otimização para otimizar.

Se você não tem LVM e pode desligar o servidor mysql.
1. Faça um bloqueio de leitura no mestre e anote a posição.
2. Desligamento do mysql
3. Copie o diretório de dados para a máquina de destino. Você pode criar uma cópia local do diretório de dados, que geralmente é mais rápido que a transferência de rede para minimizar o tempo de inatividade do mysql.
4. Iniciar o mysql
5. Na máquina de destino, certifique-se de que as configurações do ib_logfile sejam as mesmas do mestre que o mysql irá reclamar.

Raramente a cópia de dados não ocorre de forma limpa, por isso, tente novamente.

    
por 26.05.2012 / 16:58
0

Isto está escrito na documentação do mysql - > link

    
por 19.03.2013 / 11:29