Aurora MySQLを2系から3系に上げる際の懸念点

こんにちは。 エキサイト株式会社の三浦です。

AWSのAurora MySQL 2(MySQL 5.7互換)は、2024年10月31日で標準サポートが終了します。

docs.aws.amazon.com

一応料金を支払えばサポートは延長できますが、このタイミングでAurora MySQL 3(MySQL 8互換)へのバージョンアップを考えている方も多いのではないでしょうか。

今回は、バージョンアップに際して考えるべきことをまとめます。

なお、今回説明する内容はまだ考察段階であり、実際のアップデートの適用前です。 あくまで参考として見ていただけると幸いです。

アップデート前

SQLやデータ構造が非互換

古いバージョンだと動くものの、バージョンアップすると動かなくなる可能性がある構文やデータ構造があります。

例えば、以下のような構文やデータ構造です。

  • GROUP BY を使っていて、条件的に一意に定まらないカラムを SELECT で指定している
  • MySQL 8から予約語になった RANK を、エスケープせずに使っている
  • 0の日付・タイムスタンプを使っている

これらはあくまで例であり、これ以外にも動かなくなる構文やデータ構造がある可能性があるので、必要に応じて対応しましょう。

文字セット・照合順序の変更によるエラー

古いバージョンだと文字セット utf8 とは utf8mb3エイリアスですが、すでにこれは非推奨であり、今後は utf8mb4 を使う必要があります。

いずれは utf8mb3 は使えなくなる可能性があるほか、 utf8 という文字セットも utf8mb3 ではなく utf8mb4エイリアスになっていく可能性があるようです。

必ずしもAurora MySQL 3への変更の際にすぐに変える必要はないかもしれませんが、この機会に変えてしまったほうが安全かもしれません。

また関連して、照合順序も変える必要が出てきます。

照合順序は、選び方次第で「は」「ぱ」「ば」を区別してくれなかったりなどいろいろな違いがあるので、適切なものを選んでいきましょう。

すでに utf8mb4 を使っている場合でも、MySQL 8からは utf8mb4 のデフォルトの照合順序が変わっているようです。

もしデフォルト値を使っている場合は予期せぬ変更が起きてしまう場合があるので、注意しましょう。

アプリケーションからの接続問題

アプリケーションからDBに接続する際、接続用のライブラリが古いバージョンだと問題が起こる可能性があります。

アップデート前に問題ないか確認しておき、必要に応じてライブラリのバージョンアップや設定変更をするなど対応しておきましょう。

パラメータグループの変更必要性

場合によっては、クラスタインスタンスに設定しているパラメータグループの値を変更する必要があるかもしれません。

適切に動くよう、検証・対応しましょう。

アップデート時

サービス停止

通常、Aurora MySQLのメジャーバージョンアップをそのまま行うと、クラスタは一時的に使用できなくなります。

docs.aws.amazon.com

サービスが一時的に止まっても問題ないのであればそれでも構いませんが、停止したくないのであれば、以下のような手順を踏む必要があるでしょう。

手動ダブルライト

  1. 最新バージョンの新クラスタを用意しておき、既存クラスタからデータをコピーする
  2. アプリケーションから新旧クラスタ両方にデータを書き込む(ダブルライトする)ようにし、データを完全に同期する
  3. アプリケーションからのデータ読み取り先を新クラスタに変更する
  4. クラスタへの書き込みを停止し、旧クラスタを削除する

ブルーグリーンデプロイ

Aurora標準機能のブルーグリーンデプロイを使用する

docs.aws.amazon.com

アプリケーションからの向き先が自動的に新DBにならない

アプリケーションによっては、アプリケーション起動時にDBのIPアドレス等を取得・キャッシュしておき、以降はキャッシュに保存されたIPアドレスを使ってDBを見に行く、という場合もあります。

その場合、クラスタがアップデートしてIPアドレスが変わってしまうと、アプリケーションがアップデート後のDBを見に行ってくれない可能性があります。

使っているアプリケーションを確認し、もしそのような設定になっている場合は、設定を変更するか、どうしようもなければクラスタアップデート時にアプリケーション自体も再起動するようにしましょう。

アップデート後

パフォーマンスの低下・必要なスペックの増加

基本的にはバージョンが上がるとパフォーマンスも上がるはずですが、SQLの書き方やDBへの接続方法によっては、逆にパフォーマンスが下がったり、必要なCPU・メモリ等のスペックが上がってしまう可能性があります。

少なくとも、MySQL 8からはクエリキャッシュ機能がなくなるため、もしパフォーマンスをクエリキャッシュ機能に依存してしまっている場合はパフォーマンスの低下に繋がる可能性があります。

アップデート後は特に注視しておきましょう。

最後に

メジャーバージョンのアップデートは、避けられない上に非常に困難を伴う作業です。

慎重・着実にやっていきましょう。

また、上記では代表的なものを上げていきましたが、これら以外にも以下の公式ドキュメントにも書いてあるような様々な考慮点が存在します。

docs.aws.amazon.com

docs.aws.amazon.com

dev.mysql.com

dev.mysql.com

これらも参考にしつつ、障害なしのアップデートに向けて頑張っていきましょう!