Amazon Aurora MySQL バージョンアップグレード覚書

AWS

2022.9.19

Topics

はじめに

Amazon Aurora MySQL-Compatible Edition バージョン 1 (MySQL 5.6 互換) は、2023 年 2 月 28 日にサポートを終了する予定です。
サポートが終了する前に、サポートされている新しいメジャー バージョンにアップグレードすることをお勧めします。

本記事では、以下 AWS ブログを参考に Aurora のアップグレードにまつわるトピックスについてご紹介します。
Amazon Aurora MySQL-Compatible Edition バージョン 1 (MySQL 5.6 互換) をアップグレード | AWS データベースのブログ

  • 話すこと
    • Aurora with MySQL 5.6 互換性のサポート終了について
    • Aurora アップグレード手順
    • Aurora アップグレードの注意事項
    • Aurora アップグレードのベストプラクティス
  • 話さないこと
    • Aurora の基礎的なこと
    • Aurora 構築手順
    • MySQL バージョンの違い

Aurora with MySQL 5.6 互換性のサポート終了のタイムラインについて

2023 年 2 月 28 日に Aurora MySQL バージョン 1 が EOL になります。

  • 2023 年 2 月 28 日
    • Aurora MySQL バージョン 1 (MySQL 5.6 互換) クラスターから Aurora MySQL バージョン 2 (MySQL 5.7 互換) へのアップグレードをいつでも開始できます。
  • 2022 年 9 月 27 日
    • AWS マネジメントコンソールまたは AWS コマンドラインインターフェイス(AWS CLI)から新しい Aurora MySQL バージョン 1 クラスターまたはインスタンスを作成することはできません。
    • Aurora MySQL バージョン 1 を実行している Aurora グローバル データベースに新しいセカンダリリージョンを追加することもできません。
    • Aurora MySQL バージョン 1 を実行している新しいクロスリージョンリードレプリカを作成することもできません。

2023 年 2 月 28 日
この後、スケジュールされたメンテナンス ウィンドウ内で、Aurora MySQL バージョン 1 クラスターをデフォルト バージョンの Aurora MySQL バージョン 2 に自動的にアップグレードする予定です。
Aurora MySQL バージョン 1 DB スナップショットを復元すると、復元されたクラスターがその時点でデフォルト バージョンの Aurora MySQL バージョン 2 に自動的にアップグレードされます。

バージョン 1 のアップグレード対象のクラスターが存在する場合は、AWS コンソール画面で以下画像のように表示されます。
Auroraアップグレード対象通知画面

Aurora MySQL で利用可能なバージョン アップグレードについて

各バージョンによって利用可能なアップグレード先バージョンが異なります。
対象は以下のとおりです。

  • Aurora MySQL バージョン 1 (MySQL 5.6 互換)→Aurora MySQL バージョン 2 (MySQL 5.7 互換)
  • Aurora MySQL バージョン 2 (MySQL 5.7 互換)→Aurora MySQL バージョン 3 (MySQL 8.0 互換)

Aurora MySQL バージョン 1 クラスターがあり、それを Aurora MySQL バージョン 3 にアップグレードする場合は、2 段階のプロセスに従う必要があります。

バージョン 1 からいきなりバージョン 3 にアップグレードすることは出来ません。

Upgrading the major version of an Aurora MySQL DB cluster – Amazon Aurora
Amazon Aurora のバージョン – Amazon Aurora

Aurora MySQL アップグレードを実行する手順について

本記事では、構築してある Aurora MySQL バージョン 1 を一段回目に バージョン 2 へのアップグレードを実施します。
その後、バージョン 2 へアップグレードした Aurora をさらにバージョン 3 へとアップグレードします。

Aurora MySQL バージョンアップグレード手順

アップグレードを行うバージョン 1 の Aurora です。
本日時点(2022 年 9 月 13 日)で、最新のバージョンに各種アップグレードしていきます。
アップグレードを行うバージョン1のAurora

第 1 段階アップグレード概要手順

  1. Amazon RDS コンソールの左側のナビゲーションペインで、[データベース] を選択します。
  2. リストで、変更する DB クラスターを選択し、[変更] を選択します。
  3. Version には、Aurora MySQL 2.x バージョンを選択します。デフォルトのバージョンは 2.10.2 です。
  4. 続行を選択します。
  5. 次のページで、アップグレードをいつ実行するかを指定します。次のスケジュールされたメンテナンス ウィンドウの間、またはすぐに適用します。
  6. [クラスターの変更] を選択します。

第 1 段階アップグレード詳細手順

概要の手順に沿って実施します。

アップグレード対象のAurora クラスターを選択して変更を選択します。

Auroraクラスター選択画面
バージョンを 5.6 から 5.7 に変更します。

DBクラスター変更画面バージョン2.10.2指定

その他の設定項目についてはデフォルトのままにしておきます。

詳細は後述しますが、このときパラメータグループを設定しない場合は、AWS が用意したデフォルトパラメータグループが割り当てられるため気をつけてください。

「すぐに適用」を選択してクラスター変更します。
DBクラスター変更確認画面すぐに適用選択

アップグレードが完了するまで待機してバージョンを確認します。
アップグレード後のバージョン確認

バージョン 1 から 2 へのアップグレードは以上で終了です。
次は、バージョン 2 から 3 へのアップグレードについて記述します。

Aurora MySQL バージョン 2 から 3 へのアップグレード

先程使用した Aurora クラスターを使用してアップグレードを実施します。

第 2 段階アップグレード概要手順

  1. Amazon RDS コンソールのナビゲーションペインで、[データベース] を選択します。
  2. リストで、Aurora MySQL バージョン 2 DB クラスターのライター インスタンスを選択します。
  3. [Actions]を選択し、[Take snapshot]を選択します。
  4. DB クラスターのスナップショットの名前を入力します。
  5. [スナップショットを作成] を選択します。
  6. スナップショットが作成されたら、この DB クラスターのスナップショットを選択します。
  7. [アクション] を選択し、 [スナップショットの復元]を選択します。
  8. DB クラスター識別子には、復元された DB クラスターの名前を入力します。
  9. [バージョン] には、最新の Aurora MySQL 3 バージョンを選択します。
  10. 他の設定を指定し、[Restore DB cluster]を選択します。

第 2 段階アップグレード詳細手順

概要の手順に沿って実施します。
先程はクラスターインスタンスを選択しましたが、今回はライターインスタンスを選択して作業します。

アクションからスナップショット取得を選択します。

ライターインスタンス選択画面
DBスナップショット取得画面

スナップショットが取得できました。

作成したスナップショットの画面

このスナップショットを使って Aurora バージョン 3 にアップグレードをします。
スナップショットの復元を実行して、バージョン 3 を選択します。

スナップショット復元画面

また、インスタンスの設定について注意点があります。
Aurora のバージョンで使用できるインスタンスクラスが異なります。
そのため、事前に現行のインスタンスクラスが利用できるかご確認ください。
Aurora DB インスタンスクラス – Amazon Aurora

インスタンスクラスの設定画面

設定が完了したら復元するまで待機します。

バージョン3にアップグレードしたクラスター

スナップショット復元後バージョン 3 になっていることが確認できました。
これでバージョン 2 から 3 へのアップグレードは以上です。

重要な考慮事項とベスト プラクティス

上述した各バージョンのアップグレードについての考慮事項等をまとめました。
各考慮事項を踏まえながらアップグレードをご検討・ご利用ください。

スナップショットの取得

create-db-snapshot アップグレード フェーズを開始する前に、AWS CLI コマンドまたは Amazon RDS コンソールを使用して、手動でスナップショットを取得します。

アップグレードした Aurora をダウングレードすることは出来ません。
そのため、アップグレードしてサービスがうまく動作しない場合に備えて Aurora のスナップショットを取得しておきます。

アップグレードの問題を事前に特定

このコマンド を使用して mysqlcheck –check-upgrade、既存の Aurora MySQL データベースを分析し、潜在的なアップグレードの問題を事前に特定します。

mysqlcheck コマンドを使用して、バージョンの差分を事前確認することにより、移行時のリスクを減らすことが出来ます。

CHECK TABLE を FOR UPGRADE オプションで呼び出し、サーバーの現在のバージョンとの互換性のないテーブルがあるか検査します。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.3 mysqlcheck — テーブル保守プログラム

パラメータグループ

Aurora は、メジャー バージョンのアップグレード中にターゲット アップグレード バージョンの新しいパラメータ グループを自動的に作成します (パラメータ グループが提供されていない場合)。カスタムパラメータグループを使用する Aurora MySQL インスタンスの場合、アップグレード時に、現在のバージョンのパラメータグループと一致するターゲットバージョンのパラメータグループを、同様の値または同じ値を持つ同様のパラメータで常に選択します。パラメータが存在しないか、バージョン間でデフォルト値が変更されている場合は、インスタンスをアップグレードする前に、結果と動作を慎重にテストして検証してください。

「MySQL5.6→MySQL5.7」や「MySQL5.7→MySQL8.0」のバージョン間でパラメータのデフォルト値やパラメータの存在有無が異なります。

例えば、デフォルトパラメータグループと異なるパラメータを設定している場合は、アップグレードに失敗します。
そのため、カスタムパラメータグループで環境の差分を先に定義しておくことで失敗するリスクを防ぐことが出来ます。

例えば、lower_case_table_names の値をデフォルトから変更している場合で、アップグレードする際にデフォルトパラメータグループを指定すると、アップグレードに失敗します。
Amazon RDS for MySQL の既知の問題と制限 – Amazon Relational Database Service

新機能

ターゲット エンジン バージョンの新機能ページをチェックして、既定のパラメーター設定の変更を理解し、アプリケーションで使用されている可能性のあるその他の変更を確認します。

MySQL の公式ドキュメントで「MySQL5.7」や「MySQL8.0」で追加された機能について確認することが出来ます。
事前に機能について理解することで移行の失敗リスクを軽減できます。

MySQL :: MySQL 5.7 Reference Manual :: 1.3 What Is New in MySQL 5.7
MySQL :: MySQL 8.0 リファレンスマニュアル :: 1.3 MySQL 8.0 の新機能

スケジュールされたデータベース ジョブを無効

アップグレードの前にスケジュールされたデータベース ジョブを無効にし、アップグレード後に必ず有効にしてください。
さらに、実際のデータベース アップグレード プロセスを実行する前に、テスト環境または開発環境でジョブの動作をテストします。

バージョンアップグレード前後でジョブの動作について検証してください。

事前テスト

また、運用環境をアップグレードする前に、テスト環境で新しいメジャー バージョンを使用してアプリケーションの負荷テストを行うことをお勧めします。
重要なクエリをテスト EXPLAIN して実行し、新しいバージョンで追加される可能性のあるクエリ実行プランの変更やオプティマイザーの機能強化を考慮してください。
これにより、クエリの実行プランが変更され、データベースのパフォーマンスに影響を与える可能性があります。同様に、テーブルの統計が更新されていることも確認します。

MySQL のバージョンによってオプティマイザーについても変更がありました。
そのため、現行のワークロードで稼働している SQL でもアップグレード後は正しく実行プランが実施されない可能性があるので事前にご確認ください。

その際に、「Performance Insights」を有効化しておけば調査のヒントになるかもしれません。

Performance Insights を使用した Amazon RDS データベースの負荷分析 | Amazon Web Services ブログ
初めての Performance Insights 入門 | Amazon Web Services ブログ

トランザクションの確認

Aurora バージョン 1 から 2 へのインプレース アップグレードの場合、最初の手順には、Aurora がクリーン シャットダウンを実行し、
トランザクション ロールバックや元に戻すパージなどの未処理の操作を完了することが含まれます。
したがって、実稼働環境でアップグレードを開始する準備をしている間は、アップグレードの期間に影響を与える可能性がある、
長時間実行されるトランザクションやロールバックが必要な多数のトランザクションがデータベースにないことを確認してください。

トランザクションについては、MySQL のコマンドを使ってご確認ください。

MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.5.16 SHOW ENGINE 構文
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.7.5.30 SHOW PROCESSLIST 構文

更新手順のテスト

アップグレード後、自動バックアップ復元プロセス、災害復旧、または本番から非本番への更新手順をテストすることを強くお勧めします。

アップグレード後、アプリケーションの動作確認だけでなく復旧手順についても確認が必要です。

Aurora DB クラスターのバックアップと復元の概要 – Amazon Aurora
スナップショットからの復元

クラスタのエンジン属性の変更

メジャーバージョンを1から2にアップグレードすると、クラスタのエンジン属性がauroraからaurora-mysqlに変更されます。このクラスターで使用するAWS CLIまたはAPIオートメーションを更新して、変更されたエンジン値を考慮することを確認してください。

Aurora クラスタの画像で見てわかるように表記が変更されています。
この変更は CloudWatch のメトリクスでも発生します。

Aurora MySQL バージョン 3 は MYSQL 8.0 との互換性があります。 – Amazon Aurora

Aurora MySQL インスタンスが本番アプリケーションで使用されている場合、 Blue-Green デプロイを使用してアプリケーションのダウンタイムを減らすことができます。

正確に測ったわけではないですが、今回の検証では以下の時間ダウンタイムが発生しました。

  • バージョン 1→ バージョン 2:15 分~20 分(インアップグレードの待ち時間)

バージョン 2→ バージョン 3 のアップグレードでは、スナップショット作成と復元だけを行ったためダウンタイムは発生してません。
今回は実施していない DB を切り替え作業を行う場合はダウンタイムが発生します。

Q: DB スナップショットを取得し、そのスナップショットをいつまでも保持できますか?
はい。また、スナップショットを作成する際にパフォーマンスに影響はありません。DB スナップショットからデータを復元する場合は新しく DB インスタンスを作成する必要があることに注意してください。
よくある質問 – Amazon Aurora | AWS

アプリケーションの動作確認も含めると更に時間がかかると思われるので、
ダウンタイムが許容できない方は Blue-Green デプロイをご検討ください。

最小限のダウンタイムで Amazon Aurora MySQL のメジャー バージョン アップグレードを実行 | AWS データベースのブログ
Amazon Aurora MySQL のブルー/グリーン デプロイ プロセスを自動化する | AWS データベースのブログ

参考資料

Amazon Aurora MySQL-Compatible Edition バージョン 1 (MySQL 5.6 互換) をアップグレード | AWS データベースのブログ
Amazon Aurora MySQL-Compatible Edition バージョン 1 のサポート終了の準備 – Amazon Aurora
Amazon Aurora のバージョン – Amazon Aurora
Upgrading the major version of an Aurora MySQL DB cluster – Amazon Aurora
Aurora MySQL バージョン 3 は MYSQL 8.0 との互換性があります。 – Amazon Aurora

Cold-Airflow

2021年新卒入社。インフラエンジニアです。RDBが三度の飯より好きです。 主にデータベースやAWSのサーバレスについて書く予定です。あと寒いのは苦手です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら