MySQL 資料一覧

MySQLレプリケーションの同期が取れなくなった場合の復旧方法

2014/11/01更新

対応バージョン: 5.1.73

MySQLのレプリケーションが何らかの原因で同期されなくなった場合の復旧方法を示す。

基本的には以下の資料にあるように最初からレプリケーションを行うのと同じ流れになる。

関連資料・記事

状態確認

まずスレーブの状態を確認する。

この例のように2つのRunningがともにYesでない場合、レプリケーションに失敗している。

mysql> show slave status\G
:
Slave_IO_Running: Yes
Slave_SQL_Running: No
:

復旧

復旧方法はまずスレーブ側でスレーブ機能を停止し、マスタのDBデータをexportしてそれを再度importすればよい。

スレーブ
mysql> stop slave;
mysql> show slave status\G
:
Slave_IO_Running: No
Slave_SQL_Running: No
:
マスタ

スレーブ側で指定する情報を確認した上でDBデータをファイルに出力する。

mysql> show master status\G
:
File: mysql-bin.000007
Position: 626148
:

mysql> flush tables with read lock;
mysql> exit
Bye

# mysqldump -u root -p --all-databases --lock-all-tables --events > /var/tmp/db.dump

このファイルをスレーブ側にコピーしてインポートし、レプリケーションを開始する。

スレーブ
# mysql -u root -p < /var/tmp/db.dump

# mysql -u root -p

mysql> change master to
master_host='xxx.xxx.xxx.xxx', <-------- マスタのIPアドレス
master_user='xxxxx', <------------------ レプリケーション用に作成したアカウント
master_password='********', <----------- 上記アカウントのパスワード
master_log_file='mysql-bin.xxxxxx', <--- マスタ側show master statusのFile
master_log_pos=xxxxx; <----------------- マスタ側show master statusのPosition

mysql> slave start;

mysql> show slave status\G
:
Master_Log_File: mysql-bin.000007
:
Read_Master_Log_Pos: 626148
:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
:

ログファイル名とログポジションがマスタと同じでRunningが両方Yesになっていればレプリケーションは正常に動作している。