Como configurar a replicação do MySQL com tempo de inatividade mínimo

12

Basicamente, temos um grande banco de dados MySQL e queremos replicar para um escravo (configuração principal do escravo). Vocês têm algum guia passo a passo sobre como fazer isso com o tempo de inatividade MINIMAL no banco de dados? Fazer backup do banco de dados e transferir o backup para o servidor escravo (mesmo através de uma rede privada) leva cerca de 40 minutos. Bastante tempo de inatividade.

Patrick
fonte

Respostas:

15

Suponho que você use o InnoDB como um mecanismo de armazenamento. Nesse caso, você precisa ativar o log de bin . Se não estiver ativado agora, você precisará reiniciar o MySQL após modificar o my.cnf. É o único tempo de inatividade, após o qual você pode despejar o banco de dados com a posição binlog sem bloquear o banco de dados:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Com base nesse backup, restaure os dados no escravo. Depois disso, você pode seguir qualquer tutorial de replicação do MySQL e deixar o escravo acompanhar / executar junto com o mestre.

pQd
fonte
o que aconteceria se algumas tabelas não estivessem usando o innodb? E o backup acima ainda será válido se eu usar --databases para despejar um subconjunto dos bancos de dados em vez de -A?
Mathieu
se algumas tabelas não usarem innodb, o backup poderá ser inconsistente. veja aqui: stackoverflow.com/a/7461466/104398 ; O backup não conterá os bancos de dados ignorados. se você configurar a replicação com base nesse backup e não filtrar o que é replicado - sua replicação será interrompida assim que houver alguma operação nos bancos de dados omitidos.
PQD
Ok, converti minhas tabelas de myisam restantes para innodb e certifiquei-me de que apenas os bancos de dados que eu quero sejam replicados / armazenados em backup.
Mathieu
3

para iniciar uma replicação, você precisa de uma cópia consistente do seu banco de dados no escravo

suas tabelas são myisam ou innodb? descobrir problema

show table status

e veja a coluna "Mecanismo"

se todas as tabelas são innodb, você pode configurar o tempo de inatividade zero usando mysqldump --single-transaction e importando-o para o slave

se as tabelas são myisam, haverá tempo de inatividade, pois você precisará travar as tabelas para escrever enquanto elas estão sendo copiadas. O mysqlhotcopy é a ferramenta para ajudá-lo com isso.

Como alternativa, se você estiver usando LVM (gerenciador de volume lógico), poderá parar o banco de dados, tirar um instantâneo do LVM em alguns segundos e iniciar o banco de dados novamente. Em seguida, você pode fazer uma cópia consistente do instantâneo.

Aleksandar Ivanisevic
fonte
1

Para configurar o escravo, você precisará tirar um instantâneo de dados e registrar a posição do log binário. O backup do banco de dados não deve causar tempo de inatividade, apesar de causar desempenho reduzido, mas você já está fazendo o backup do banco de dados, certo? Você pode achar que o backup precisa bloquear algumas tabelas e isso pode causar bloqueios no seu aplicativo; é realmente necessário verificar como ele é implementado para isso.

Você pode capturar instantaneamente o disco? Isso reduziria consideravelmente o tempo de inatividade se você puder fazer um hotbackup.

hellomynameisjoel
fonte