はじめに
Aurora MySQL v2が2024年10月31日でEOLを迎えるので、重い腰を上げてAurora MySQL v3にしました。
v3への移行の際にBlue/Green deploymentで楽々移行♪と思っていたのですが、ハマるポイントなどもあったのでまとめました。
Blue/Green deploymentでの問題
Blue/Green作成時に「mysql.flush_rewrite_rules」のエラーが発生する
Blue/Greenの作成ボタンを押した段階で、エラーが発生しprecheckログには「mysql.flush_rewrite_rules」に関するエラー内容がありました。
{
"id": "routinesSyntaxCheck",
"title": "MySQL 8.0 syntax check for routine-like objects",
"status": "OK",
"description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
"documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
"detectedProblems": [
{
"level": "Error",
"dbObject": "mysql.flush_rewrite_rules",
"description": "at line 5,8: unexpected token 'QUERY'"
}
]
},
解決策
AWSに連絡してプロシージャをDROPしてもらうことで解決しました
本問題は RDS for MySQL DB インスタンスから移行した DB クラスターにおいて発生する場合があることを確認しております
ということで、RDS for MySQLからAuroraに移行したデータベースでは発生することがあるそうです
Blue/Green切替ができない
Blue環境とGreen環境の切り替えが失敗してしまう
Message : Switchover from DB cluster dev-aurora to dev-aurora-green was canceled due to external replication on dev-aurora.
Stop replication from an external database to dev-aurora before you switch over.
解決策
元々オンプレミスからRDSに移行した際に、ライターインスタンスのSlave解除をせずに運用していたため発生していました
ライターインスタンスのリセットを行うことで解決しました
SELECT * FROM mysql.rds_history;
もしリセットされてなかったら
CALL mysql.rds_reset_external_master;
でリセットする
MySQL5.7 → MySQL8.0 になったことによる問題
Rankが予約語になった
選択肢として、
- アプリケーション側でのエスケープ対応
- カラム名の変更
となると思いますが、エスケープ忘れなどミスが起きる可能性があるため 2. カラム名の変更
で対応しました。
移行後に特定クエリのパフォーマンスが劣化した
巨大なテーブルをJOINするクエリにおいてパフォーマンスが劣化してしまう
解決策
MySQL8.0から一時テーブルの動作が変更されていた
ストレージエンジンパラメータであるtemptable_max_ram、temptable_max_mmapをJOINするテーブルサイズを参考に、余裕をもたせた値に調整して対応しました。
まとめ
MySQL8.0になったこと
- MySQL 8系統にアップグレードしたことで、以前は使用できなかったWith句など、利用したかった機能が利用可能になった
Blue/Green deploymentを利用したこと
- 大変なDBのアップグレード作業をコンソール上の簡単な操作でできる
- 開発環境での試験中にエラーが発生したが、適切に元の状態に戻ってくれるため、本番でも失安心して作業を進めることができた