Rebuild mysql slave a partir do zero

2

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?

    
por Ward Loockx 01.09.2012 / 11:27

3 respostas

3

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

    
por 01.09.2012 / 11:33
1

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:

link

    
por 20.05.2015 / 21:11
0

Siga este:

  • Desconectar escravo e mestre
  • Basta soltar todos os bancos de dados do escravo
  • dados de despejo do mestre com transação única
  • usa o despejo no escravo
  • reconecte mestre e escravo e aguarde a sincronização
por 01.09.2012 / 14:07