web-dev-qa-db-ja.com

MySQLレプリケーションの失敗から回復する最良の方法は何ですか?

今日、マスターmysql dbサーバーと2つのレプリケーションサーバーの間のレプリケーションが削除されました。私はここにずっと前に書かれた手順を持っています、そしてそれがこの問題に対して回復する最も速い方法であるかどうかわかりません。手順を共有したいと思います。あなたがそれについてあなたの考えを述べることができ、そしてそれがどのようにしてより迅速に行うことができるかについても教えてくれれば幸いです。

At the master:

RESET MASTER;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
And copy the values of the result of the last command somewhere.

Wihtout closing the connection to the client (because it would release the read lock) issue the command to get a dump of the master:

mysqldump mysq
Now you can release the lock, even if the dump hasn't end. To do it perform the following command in the mysql client:

UNLOCK TABLES;
Now copy the dump file to the slave using scp or your preferred tool.

At the slave:

Open a connection to mysql and type:

STOP SLAVE;
Load master's data dump with this console command:

mysql -uroot -p < mysqldump.sql
Sync slave and master logs:

RESET SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
Where the values of the above fields are the ones you copied before.

Finally type

START SLAVE;
And to check that everything is working again, if you type

SHOW SLAVE STATUS;
you should see:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
That's it!

現時点では、マスターから他の2つのレプリケーションサーバーにデータベースをコピーする段階にあり、その時点までに6時間以上かかりますが、遅すぎませんか。サーバーは1GBスイッチを介して接続されます。

6
Itai Ganot

停止した位置からレプリケーションを開始できます。スレーブサーバーのMysqlログに、レプリケーションが停止した最後のmysql binログの位置が含まれていることを確認する必要があります。

 STOP SLAVE;

 RESET Slave;

 FLUSH TABLES WITH READ LOCK;

 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

 Where the values of the above fields are the ones where replication stopped.  

最後に入力

 START SLAVE;

これは古いスレッドであることは知っていますが、他の人のために投稿します。私自身はこの質問への回答はありませんが、現在、このようなシナリオの計画を立てている最中であり、そうしている間に、この記事が参考になると思いました。

http://www.barryodonovan.com/index.php/2013/03/23/recovering-mysql-master-master-replication

それは非常によく書かれていて、理解しやすく、実用的で、OPが求めていたものと一致していると思います。

0
user301353