0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Aurora MySQL version2からversion3にしたときに詰まったこと

Last updated at Posted at 2023-08-29

はじめに

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が予約語になった

選択肢として、

  1. アプリケーション側でのエスケープ対応
  2. カラム名の変更

となると思いますが、エスケープ忘れなどミスが起きる可能性があるため 2. カラム名の変更 で対応しました。

移行後に特定クエリのパフォーマンスが劣化した

巨大なテーブルをJOINするクエリにおいてパフォーマンスが劣化してしまう

解決策

MySQL8.0から一時テーブルの動作が変更されていた
ストレージエンジンパラメータであるtemptable_max_ram、temptable_max_mmapをJOINするテーブルサイズを参考に、余裕をもたせた値に調整して対応しました。

まとめ

MySQL8.0になったこと

  • MySQL 8系統にアップグレードしたことで、以前は使用できなかったWith句など、利用したかった機能が利用可能になった

Blue/Green deploymentを利用したこと

  • 大変なDBのアップグレード作業をコンソール上の簡単な操作でできる
  • 開発環境での試験中にエラーが発生したが、適切に元の状態に戻ってくれるため、本番でも失安心して作業を進めることができた

AWS公式の記事以外で参考にした記事

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?