se você usar o mecanismo innodb no master - apenas use mysqldump com - skip-lock-tables , --única transação e --master-data = 2 .
se o seu escravo estiver apenas logicamente corrompido - tente pt-table-sync com bloqueio = opção 0
Estou tendo uma configuração master / slave mysql. Esta noite tive alguns problemas com o mestre. Eu precisava recriar todos os bancos de dados novamente porque estavam corrompidos.
Agora parei meu escravo mysql, mas quero iniciá-lo novamente e reconstruir tudo do zero. Existe uma maneira de fazer isso? Sem bloquear o mestre ...
Eu também acho que o arquivo binlog deve ser redefinido. Então tudo está limpo de novo.
Alguma idéia?
se você usar o mecanismo innodb no master - apenas use mysqldump com - skip-lock-tables , --única transação e --master-data = 2 .
se o seu escravo estiver apenas logicamente corrompido - tente pt-table-sync com bloqueio = opção 0
Aqui estão instruções passo a passo sobre como reconstruir o escravo do MySQL a partir do mestre usando instantâneos do Linux LVM. Este é o método ideal quando você não pode pagar muito tempo de inatividade para copiar arquivos binários para o escravo. Existem outras maneiras de fazer isso, mas eu sempre questiono a consistência do escravo. Eu faço meus backups do escravo, então eu absolutamente preciso ter certeza de que meus instantâneos são consistentes o tempo todo.
Defina innodb max dirty pages por cento para zero. Isso forçará o MySQL a gravar todas as páginas no disco, o que acelerará significativamente a reinicialização.
set global innodb_max_dirty_pages_pct = 0;
Para monitorar o número de páginas sujas, execute o comando
mysqladmin ext -i10 | grep dirty
Quando o número parar de diminuir, você alcançará o ponto para continuar. Em seguida, redefina o mestre para limpar os logs antigos de logs / retransmissão da bandeja:
RESET MASTER;
Execute o lvdisplay para obter o caminho LV
lvdisplay
A saída será semelhante a esta
--- Logical volume ---
LV Path /dev/vg_mysql/lv_data
LV Name lv_data
VG Name vg_mysql
Encerre o banco de dados mestre com o comando
service mysql stop
Em seguida, tire um snaphot, mysql_snapshot será o novo nome do volume lógico. Se binlogs forem colocados na unidade do sistema operacional, eles também precisam ser um instantâneo.
lvcreate --size 10G --snapshot --name mysql_snapshot /dev/vg_mysql/lv_data
Inicie o mestre novamente com o comando
service mysql start
Restaurar configurações de páginas sujas para o padrão
set global innodb_max_dirty_pages_pct = 75;
Execute o lvdisplay novamente para garantir que o instantâneo esteja lá e visível
lvdisplay
Saída:
--- Logical volume ---
LV Path /dev/vg_mysql/mysql_snapshot
LV Name mysql_snapshot
VG Name vg_mysql
Monte o instantâneo
mkdir /mnt/mysql_snapshot
mount /dev/vg_mysql/mysql_snapshot /mnt/mysql_snapshot
Se você tem um escravo existente do MySQL, você precisa pará-lo
service mysql stop
Em seguida, você precisa limpar a pasta de dados do MySQL
cd /var/lib/mysql
rm -fr *
Voltar para o mestre. Agora rsync o instantâneo para o escravo do MySQL
rsync --progress -harz /mnt/mysql_snapshot/ targethostname:/var/lib/mysql/
Uma vez concluído o rsync, você pode desmontar e remover o instantâneo
umount /mnt/mysql_snapshot
lvremove -f /dev/vg_mysql/mysql_snapshot
Crie um usuário de replicação no mestre, se o antigo usuário de replicação não existir ou a senha for desconhecida
GRANT REPLICATION SLAVE on *.* to 'replication'@'[SLAVE IP]' identified by 'YourPass';
Verifique se os arquivos de dados / var / lib / mysql são de propriedade do usuário mysql, se assim você pode omitir o seguinte comando:
chown -R mysql:mysql /var/lib/mysql
Em seguida, registre a posição do log binário
ls -laF | grep mysql-bin
Você verá algo como
..
-rw-rw---- 1 mysql mysql 1073750329 Aug 28 03:33 mysql-bin.000017
-rw-rw---- 1 mysql mysql 1073741932 Aug 28 08:32 mysql-bin.000018
-rw-rw---- 1 mysql mysql 963333441 Aug 28 15:37 mysql-bin.000019
-rw-rw---- 1 mysql mysql 65657162 Aug 28 16:44 mysql-bin.000020
Aqui, o arquivo de log principal é o número de arquivo mais alto na sequência e a posição do log de bin é o tamanho do arquivo. Registre esses valores:
master_log_file=mysql-bin.000020
master_log_post=65657162
Em seguida, inicie o escravo MySQL
service mysql start
Execute o comando change master no slave executando o seguinte:
CHANGE MASTER TO
master_host="10.0.0.12",
master_user="replication",
master_password="YourPass",
master_log_file="mysql-bin.000020",
master_log_pos=65657162;
Finalmente inicie o escravo
SLAVE START;
Verifique o status do escravo:
SHOW SLAVE STATUS\G
Certifique-se de que o Slave IO esteja em execução e que não haja erros de conexão. Boa sorte!
Minha postagem completa no blog é encontrada em para mais informações:
Siga este:
Tags mysql mysql-replication mysql5