Páginas

domingo, 2 de março de 2014

Checksum Replicação e ReSync série Mysql: Desempenho e Disponibilidade

Eai Pessoal,

Após a replicação completa existe um medo muito grande em todos nós... e se minha replica não é idêntica a ao servidor principal, e seu meu slave escorregou em alguma chave como eu checo isso? com o eu arrumo isso? A um tempão atrás eu havia lido isso no livro High Performance Mysql *O'Reilly* , quando fiz minha primeira replicação, porém nesta nova implantação checando na mão eu notei uma escorregadinha do slave e pensei... XI... F****!!

Com uma rápida busca no gigante eu achei um tutorial legal usando a mesma ferramenta utilizada no livro acima o Percona, o tutorial tem um nome bem sugestivo "Replicação com Checksum - Mysql Replicações a Prova de Bala"



Adquirindo o Percona 


Vá ao site do fabricante no www.percona.com
Vá na aba software
Vá em percona toolkit for MySql

ou clique a seguir: http://www.percona.com/software/percona-toolkit

Instalando o Percona

Você possui a opção de baixar ele em rpm, deb, tar.gz, por estar utilizando Debian em tudo utilizei o deb porém  não é complexo utilizar os outros processos.

dpkg -i percona-toolkit_2.2.7_all.deb

Caso falte alguma dependência basta copiar ele e colocar na frente do "apt-get install" a maioria delas são relacionadas ao perl

Utilizando o Percona para Checar a Integridade


No MASTER rode o seguinte comando, ele irá checar a sua tabela inteira.

$pt-table-checksum --replicate=test.checksum --create-replicate-table --databases=TABELA localhost

Agora que temos todos os checksum das tabelas vamos checar o SLAVE para ver se ele não
escorregou rode novamente no MASTER o comando abaixo:

$pt-table-checksum --replicate=test.checksum --replicate-check-only --databases=TABELA localhost

Se não tiver saída nenhuma quer dizer que esta tudo OK!!! se não......

ReSync do Slave

Agora os passo são mais simples porém demorados.

Master


Vamos reiniciar o master para que ele comece tudo do zero.

mysql> RESET MASTER;
Query OK, 0 ROWS affected (0.14 sec)
 
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 ROWS affected (0.03 sec)
 
mysql> SHOW MASTER STATUS\G
*************************** 1. ROW ***************************
            File: mysql-bin.000001
        POSITION: 106
    Binlog_Do_DB: 
Binlog_Ignore_DB: 
1 ROW IN SET (0.00 sec)

Faça novamente o dump da tabela inteira

mysqldump -u root -p TABELA > TABELA.sql

Envie o para o Slave o TABELA.sql

Slave


Apague TODA a informação da TABELA no slave e carrege o TABELA.sql

mysqldump -u root -p TABELA < TABELA.sql

Resete as configurações do SLAVE 


mysql> STOP SLAVE;
Query OK, 0 ROWS affected (0.14 sec)
 
mysql> RESET SLAVE;
Query OK, 0 ROWS affected (0.18 sec)
 
mysql> CHANGE MASTER TO 
       MASTER_LOG_FILE='mysql-bin.000001',
       MASTER_LOG_POS=106;
Query OK, 0 ROWS affected (1.08 sec)
mysql> START SLAVE;
Query OK, 0 ROWS affected (0.08 sec)
mysql> SHOW SLAVE STATUS \G;
Query OK, 0 ROWS affected (0.02 sec)


Master


Libere as tabelas no MASTER;

mysql> UNLOCK TABLES;

Bibliografia

http://www.percona.com
http://www.iheavy.com/2012/04/26/bulletproofing-mysql-replications-with-checksums/
http://www.percona.com/doc/percona-toolkit/2.2/

Nenhum comentário:

Postar um comentário