Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como ressincronizar o banco de dados MySQL se o mestre e o escravo tiverem banco de dados diferente no caso de replicação do MySQL?


Este é o procedimento passo a passo completo para ressincronizar uma replicação mestre-escravo do zero:

No mestre:
RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;

E copie os valores do resultado do último comando em algum lugar.

Sem fechar a conexão com o cliente (porque liberaria o bloqueio de leitura) emita o comando para obter um dump do master:
mysqldump -u root -p --all-databases > /a/path/mysqldump.sql

Agora você pode liberar o bloqueio, mesmo que o despejo ainda não tenha terminado. Para fazer isso, execute o seguinte comando no cliente MySQL:
UNLOCK TABLES;

Agora copie o arquivo de despejo para o escravo usando scp ou sua ferramenta preferida.

No escravo:

Abra uma conexão com o mysql e digite:
STOP SLAVE;

Carregue o despejo de dados do mestre com este comando do console:
mysql -uroot -p < mysqldump.sql

Sincronize os logs do escravo e do mestre:
RESET SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

Onde os valores dos campos acima são aqueles que você copiou antes.

Por fim, digite:
START SLAVE;

Para verificar se tudo está funcionando novamente, depois de digitar:
SHOW SLAVE STATUS;

Você deveria ver:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

É isso!