MySQL レプリケーション関連Tips
前回のブログに引き続き、MySQLのレプリケーションについて。今回は実装レベルでのTipsについても言及。以前ハマったことのある内容を中心に書いておく。
IPアドレス/ホスト名変更対応
- マスター、スレーブのIPアドレス、ホスト名のいずれか、または両方が変更になった場合スレーブ側で古いマスター情報を覚えてしまうケースがある。基本的には*.infoファイルやmy.cnfのレプリケーション関連パラメータをクリアすればよい。この方法でも以前の情報がクリアできない(マスター情報をInitializeできない)場合はスレーブ側で以下のコマンドを実行する。参考資料(Ver.5.1マニュアル)
mysql> reset slave;
SQLスレッドエラー対処
- SQLスレッドが発生する典型的なケースとしては、スレーブDBのデータを直接手動で変更してしまい、その後マスターで当該データが更新された場合がある。エラーを発生させたクエリをスキップさせ、スレーブを再起動(stop slave/start slave)すれば同期が再開される。ただし、どのデータがエラー原因になったかはスレーブのエラーログまた「show slave status」などで確認する必要あり。参考資料(Ver5.1マニュアル)
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=x;
マスターでbinlogを出力せずにクエリを実行
- SUPER権限ユーザでのみ使用可能。参考資料(Ver4.1マニュアル)
- リカバリ時の性能面への考慮のほか、LOAD DATAコマンドのbinlogロギングバグに対するバイパスとしても使用可能。例えば、レプリケーション対象でないスキーマ(データベース)にデータ投入する、など。
mysql> SET SQL_LOG_BIN=0;