へろへろもへじ

(ブログタイトル募集中)

【AWS,RDS,MySQL】RDS(MySQL)のリードレプリカでレプリケーションエラーが出た際の対処

AWSの公式ドキュメントを見ればわかるよ!と言われればそれまでなんですが、備忘録として。

対処方法

MySQL5.5.23以前のバージョンの場合

  • 「リードレプリカを作り直す」の一択...

「1062:Duplicate entry...」が発生した場合 (※MySQL5.5.23以降で有効)

  • mysqlコマンドで対象のリードレプリカにログインする
  • レプリケーションエラーが出ていることを確認
    • show slave status\G
  • エラーとなっているSQLをスキップするをスキップする
    • CALL mysql.rds_skip_repl_error;
  • レプリケーションエラーが解消されていることを確認
    • show slave status\G

「1236:Client requested master to start replication from impossible position」が発生した場合 (※MySQL5.5.31以降で有効)

  • mysqlコマンドで対象のリードレプリカにログインする
  • レプリケーションエラーが出ていることをこちらでも念のため確認し、Master_Log_Fileの内容(mysql-bin-changelog.0XXXXX)を控えておく
    • show slave status\G
  • 止まっているbinログからレプリケーションを再開する。0始まりの数値になっている場合、0は除去する。
    • CALL mysql.rds_next_master_log(XXXXX);
  • レプリケーションエラーが解消されていることを確認
    • show slave status\G


所感など

rds_next_master_logとrds_next_master_logを試行しても改善されない場合もあり、その場合はリードレプリカを作り直すことになります。。

また、MySQLのバージョンはなるべく最新を、メジャーバージョンの最新が無理ならばマイナーバージョンだけでも最新を使ったほうがいいかと思います。上述にもある通り、バージョンによって該当のプロシージャがないので。。

参考サイト

mysql.rds_skip_repl_errorに関して

mysql.rds_next_master_logに関して