More Related Content
More from ngi group. (17)
エンジニア知識共有会発表資料_20090917_レプリケーションの障害復旧
- 3. レプリケーションの状態の確認 「mysql> show slave status;」のSlave_IO_Running: とSlave_SQL_Running: を見る Slave_IO_Running:I/Oスレッドが開始されたかどうかを示す Slave_SQL_Running:SQLスレッドが開始されたかどうかを示す
- 6. I/Oスレッドが停止している場合の対処 まずは、start slave io_thread; を試す。※オプションなしのstart slave;でI/OとSQLのスレーブスレッドを同時に開始させることができるが、ここでは念のため、オプションを指定して試している。 改善しない場合には以下を実施(主な施策)A.マスターサーバのhost名の確認my.cnf:「master-host」「master-user」「master-password」show slave status;:「Master_Host」と「Master_User」 間違っていた場合my.cnf->書き直し、mysqlを再起動show slave status->CHANGE MASTER TO MASTER_HOST = ‘ホスト名’,MASTER_USER = ‘ユーザ名’, MASTER_PASSWORD = ‘パスワード’,MASTER_LOG_FILE = ‘master-bin.0000XX’, MASTER_LOG_POS = YYY;
- 8. SQLスレッドが停止している場合の対処 まずは、start slave sql_thread; を試す。※オプションなしのstart slave;でI/OとSQLのスレーブスレッドを同時に開始させることができるが、ここでは念のため、オプションを指定して試している。 改善しない場合↓今回の異常はこのパターン原因は、レプリケーション停止中にスレーブサーバでなんらかの更新系SQLがはいってしまった。
- 9. Show slave status;の「Last_Error:」 Last_Error: Error 'Duplicate entry ‘123456' for key 1' on query. Default database: ‘db_name'. Query: 'INSERT INTO sessions (`updated_at`, `session_id`, `data`) VALUES('2009-09-08 18:04:04', 'afa6900d3b0352f745aca345e249d879', 'BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA==')‘ テーブル「db_name」(DBはテーブル名から推論する)のid「123456」(entry`123456`の部分)のレコードが重複している、というアラート↓つまり、スレーブ側にすでにIDが存在するため、同期ができない、という状態
- 10. 復旧の手順 Stop slave; Show slave status;の「Last Error:」から、テーブル名とIdを確認 重複したレコードを同期回避するA.同レコードを削除する (DELETE文)B.同レコードを無視する (SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; ) Start slave;
- 12. 参考 現場指向のレプリケーション詳説http://www.irori.org/doc/mysql-rep.html [MySQLウォッチ]第18回レプリケーションのトラブル脱出http://itpro.nikkeibp.co.jp/members/ITPro/oss/20050712/164383/?ST=oss&P=1 MySQLレプリケーションの設定http://www.maruko2.com/mw/MySQL_レプリケーションの設定 [MySQL]レプリケーションとスレーブ(Slave)エラーの対処(データの整合性)http://blog.mikuriya.biz/archives/6 MySQLレプリケーションを安全に利用するための10のテクニックhttp://nippondanji.blogspot.com/2009/03/mysql10.html