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になっていればレプリケーションは正常に動作している。