MySQL DB エンジンのアップグレード - Amazon Relational Database Service

MySQL DB エンジンのアップグレード

新しいバージョンのデータベースエンジンが Amazon RDS でサポートされている場合は、DB インスタンスをその新しいバージョンにアップグレードできます。MySQL データベースのアップグレードには、メジャーバージョンのアップグレードとマイナーバージョンのアップグレードの 2 種類があります。

メジャーバージョンのアップグレード

メジャーバージョンのアップグレードには、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。そのため、DB インスタンスのメジャーバージョンアップグレードは手動で実行する必要があります。メジャーバージョンアップグレードをスタートするには、DB インスタンスを変更します。メジャーバージョンのアップグレードを行う前に、「MySQL のメジャーバージョンのアップグレード」の手順を実行することをお勧めします。

マルチ AZ DB インスタンスデプロイのメジャーバージョンアップグレードの場合、Amazon RDS はプライマリとスタンバイの両方のレプリカを同時にアップグレードします。アップグレードが完了するまで、DB インスタンスは使用できなくなります。現在、Amazon RDS はマルチ AZ DB クラスターデプロイのメジャーバージョンアップグレードをサポートしていません。

ヒント

ブルー/グリーンデプロイを使用することで、メジャーバージョンアップグレードに必要なダウンタイムを最小限に抑えることができます。詳細については、「データベース更新のために Amazon RDS ブルー/グリーンデプロイを使用する」を参照してください。

マイナーバージョンのアップグレード

マイナーバージョンアップグレードには、既存のアプリケーションとの下位互換性がある変更のみが含まれます。マイナーバージョンのアップグレードを手動でスタートするには、DB インスタンスを変更します。または、DB インスタンスの作成時または変更時に、[マイナーバージョン自動アップグレード] を有効にすることができます。これにより、Amazon RDS は、新しいバージョンがテストおよび承認されると、DB インスタンスを自動的にアップグレードします。アップグレードの実行については、「DB インスタンスのエンジンバージョンのアップグレード」を参照してください。

マルチ AZ DB クラスターのマイナーバージョンアップグレードを実行すると、Amazon RDS はリーダー DB インスタンスを一度に 1 つずつアップグレードします。その後、リーダー DB インスタンスの 1 つが新しいライター DB インスタンスに切り替わります。次に、Amazon RDS は、古いライターインスタンス (今ではリーダーインスタンス) をアップグレードします。

注記

マルチ AZ DB インスタンスデプロイのマイナーバージョンアップグレードのダウンタイムは、数分続く場合があります。マルチ AZ DB クラスターは、通常、マイナーバージョンアップグレードのダウンタイムを約 35 秒に短縮します。RDS Proxy と併用すると、ダウンタイムをさらに 1 秒以下に短縮できます。詳細については、「Amazon RDS Proxy の使用」を参照してください。または、ProxySQLPgBouncer、または MySQL 用 AWS JDBC ドライバーなどのオープンソースデータベースプロキシを使用することもできます。

ご使用の MySQL DB インスタンスでリードレプリカを使用している場合は、ソースインスタンスをアップグレードする前に、すべてのリードレプリカをアップグレードする必要があります。

アップグレードの概要

AWS Management Console を使用して DB インスタンスをアップグレードする場合、DB インスタンスの有効なアップグレードターゲットが表示されます。次の AWS CLI コマンドを使用して、DB インスタンスの有効なアップグレードターゲットを特定することもできます。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine mysql \ --engine-version version-number \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

Windows の場合:

aws rds describe-db-engine-versions ^ --engine mysql ^ --engine-version version-number ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

例えば、MySQL バージョン 8.0.23 DB インスタンスの有効なアップグレードターゲットを特定するには、次の AWS CLI コマンドを実行します。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine mysql \ --engine-version 8.0.28 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

Windows の場合:

aws rds describe-db-engine-versions ^ --engine mysql ^ --engine-version 8.0.28 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{EngineVersion:EngineVersion}" --output text

Amazon RDS によってアップグレードプロセス中に 2 つ以上の DB スナップショットが作成されます。Amazon RDS は、アップグレードを変更する前に DB インスタンスのスナップショットを最大 2 つ作成します。アップグレードがデータベースに対して機能しない場合は、これらのスナップショットの 1 つを復元して、以前のバージョンを実行する DB インスタンスを作成できます。Amazon RDS は、アップグレードが完了すると、DB インスタンスのもう 1 つのスナップショットを作成します。Amazon RDS は、AWS Backup が DB インスタンスのバックアップを管理するかどうかにかかわらず、これらのスナップショットを作成します。

注記

DB インスタンスのバックアップ保持期間を 0 より大きく設定した場合にのみ、Amazon RDS は DB スナップショットを作成します。バックアップ保持期間を変更するには、「Amazon RDS DB インスタンスを変更する」を参照してください。

アップグレードが完了したら、データベースエンジンの前のバージョンに戻すことはできません。前のバージョンに戻す必要がある場合は、作成された初期の DB スナップショットを復元して、新しい DB インスタンスを作成します。

Amazon RDS でサポートされている新しいバージョンに DB インスタンスをアップグレードするタイミングを制御します。このレベルの管理によって、特定のデータベースのバージョンとの互換性を維持しながら、新しいバージョンを本稼働環境にデプロイする前にアプリケーションに対してテストできます。準備が整ったら、自分のスケジュールに最適なタイミングでバージョンアップグレードを実行できます。

ご使用の DB インスタンスでリードレプリカを使用している場合は、ソースインスタンスをアップグレードする前に、すべてのリードレプリカをアップグレードする必要があります。

MySQL バージョン番号

RDS for MySQL データベースエンジンのバージョン番号付けシーケンスは、major.minor.patch.YYYYMMDD または major.minor.patch の形式です。例えば、8.0.33.R2.20231201 または 5.7.44 です。使用される形式は、MySQL エンジンのバージョンによって異なります。RDS 延長サポートのバージョン番号付けの詳細については、「Amazon RDS 延長サポートバージョンの命名規則」を参照してください。

major

メジャーバージョン番号は、8.0 など、バージョン番号の整数部分と 1 つ目の小数部分の両方です。メジャーバージョンのアップグレードでは、バージョン番号の主要な部分が大きくなります。例えば、5.7.44 から 8.0.33 へのアップグレードはメジャーバージョンアップグレードであり、5.78.0 はメジャーバージョン番号です。

minor

マイナーバージョン番号は、バージョン番号の 3 番目の部分です。例えば、8.0.33 の 33 です。

patch

パッチはバージョン番号の 4 番目の部分です。例えば、8.0.33.R2 の R2 です。RDS パッチバージョンには、リリース後にマイナーバージョンに追加された重要なバグ修正が含まれています。

YYYYMMDD

日付はバージョン番号の 5 番目の部分です。例えば、8.0.33.R2.20231201 の 20231201 です。RDS 日付バージョンは、リリース後にマイナーバージョンに追加された重要なセキュリティ修正を含むセキュリティパッチです。エンジンの動作を変更する可能性のある修正は含まれていません。

メジャーバージョン マイナーバージョン 命名スキーム
8.0 ≥ 33 新しい DB インスタンスは、major.minor.patch.YYMMDD を使用します。例えば、8.0.33.R2.20231201 です。

既存の DB インスタンスは、次のメジャーまたはマイナーバージョンアップグレードまで、8.0.33.R2 など、major.minor.patch を使用する場合があります。

< 33 既存の DB イスタンスは、major.minor.patch を使用します。例えば、8.0.32.R2 です。
5.7 ≥ 42 新しい DB インスタンスは、major.minor.patch.YYMMDD を使用します。例えば、5.7.42.R2.20231201 です。

既存の DB インスタンスは、次のメジャーまたはマイナーバージョンアップグレードまで、5.7.42.R2 など、major.minor.patch を使用する場合があります。

RDS バージョン番号

RDS バージョン番号は major.minor.patch または major.minor.patch.YYYYMMDD 命名規則を使用します。RDS パッチバージョンには、リリース後にマイナーバージョンに追加された重要なバグ修正が含まれています。RDS 日付バージョン (YYMMDD ) はセキュリティパッチです。セキュリティパッチには、エンジンの動作を変更する可能性のある修正は含まれていません。RDS 延長サポートのバージョン番号付けの詳細については、「Amazon RDS 延長サポートバージョンの命名規則」を参照してください。

データベースの Amazon RDS バージョン番号を識別するには、まず次のコマンドを使用して rds_tools 拡張機能を作成する必要があります。

CREATE EXTENSION rds_tools;

RDS for MySQL データベースの RDS バージョン番号は、次の SQL クエリで確認できます。

mysql> select mysql.rds_version();

ば、RDS for MySQL 8.0.34 データベースをクエリすると、次の出力が返されます。

+---------------------+ | mysql.rds_version() | +---------------------+ | 8.0.34.R2.20231201 | +---------------------+ 1 row in set (0.01 sec)

MySQL のメジャーバージョンのアップグレード

Amazon RDS では現在、MySQL データベースエンジンで以下のインプレースのメジャーバージョンのアップグレードがサポートされています。

  • MySQL 5.6 から MySQL 5.7 へ

  • MySQL 5.7 から MySQL 8.0 へ

注記

最新世代の DB インスタンスクラスと現行世代の DB インスタンスクラスでは、前世代 (db.m3) の DB インスタンスクラスに加えて、MySQL バージョン 5.7 および 8.0 DB インスタンスのみ作成できます。

場合によっては、旧世代の DB インスタンスクラス (db.m3 以外) で実行されている MySQL バージョン 5.6 DB インスタンスを MySQL バージョン 5.7 DB インスタンスにアップグレードする必要があります。このような場合は、まず最新世代または現行世代の DB インスタンスクラスを使用するように DB インスタンスを変更します。変更したら、MySQL バージョン 5.7 データベースエンジンを使用するように DB インスタンスを変更できます。Amazon RDS DB インスタンスクラスについては、「 DB インスタンスクラス」を参照してください。

MySQL のメジャーバージョンのアップグレードの概要

メジャーバージョンのアップグレードには、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。そのため、メジャーバージョンのアップグレードは自動的に Amazon RDS に適用されません。手動で DB インスタンスを変更する必要があります。本稼働インスタンスへの適用前に、いずれのアップグレードも徹底的にテストすることをお勧めします。

Amazon RDS の MySQL バージョン 5.6 DB インスタンスから MySQL バージョン 5.7 以降へのメジャーバージョンアップグレードを実行するには、まず OS の更新 (ある場合) を実行します。OS の更新が完了したら、それぞれのメジャーバージョン (5.6 から 5.7、5.7 から 8.0) にアップグレードします。2014 年 4 月 24 日以前に作成された MySQL DB は、更新が適用されるまで使用可能な OS の更新を表示します。OS 更新の詳細については、「DB インスタンスのアップデートを適用する」を参照してください。

MySQL のメジャーバージョンアップグレード中、必要に応じて Amazon RDS によって MySQL バイナリ mysql_upgrade が実行され、テーブルがアップグレードされます。また、メジャーバージョンアップグレード中に Amazon RDS によって slow_log および general_log テーブルが空にされます。ログ情報を保持するには、メジャーバージョンアップグレードの前にログファイルの内容を保存します。

MySQL のメジャーバージョンアップグレードは、通常約 10 分で完了します。一部のアップグレードでは、DB インスタンスクラスのサイズのため、またはインスタンスが「Amazon RDS のベストプラクティス」の運用ガイドラインに従っていないため、この時間が長くなることがあります。Amazon RDS コンソールから DB インスタンスをアップグレードする場合、アップグレードが完了すると、DB インスタンスのステータスが表示されます。AWS Command Line Interface (AWS CLI) を使用してアップグレードする場合は、describe-db-instances コマンドを使用し、Status 値を確認します。

MySQL バージョン 5.7 へのアップグレードは遅くなる場合がある

MySQL バージョン 5.6.4 では、datetimetimetimestamp 列で、日付と時刻の値に小数部を使用できる新しい日付と時刻の形式が導入されました。DB インスタンスを MySQL バージョン 5.7 にアップグレードすると、MySQL はすべての日付と時刻の列のタイプを新しい形式に強制的に変換します。

この変換はテーブルを再作成するため、DB インスタンスのアップグレードを完了するのにかなりの時間がかかる場合があります。この変換は、MySQL バージョン 5.6.4 より前のバージョンを実行しているすべての DB インスタンスに対して行われます。また、MySQL バージョン 5.6.4 より前のバージョンから 5.7 以外のバージョンにアップグレードされたすべての DB インスタンスでも行われます。

DB インスタンスが MySQL バージョン 5.6.4 より前のバージョンを実行している場合、または 5.6.4 より前のバージョンからアップグレードされている場合は、追加のステップを行うことをお勧めします。このような場合は、DB インスタンスを MySQL バージョン 5.7 にアップグレードする前に、データベース内の datetimetime、および timestamp 列を変換することをお勧めします。この変換により MySQL バージョン 5.7 へのアップグレードに必要な時間を大幅に削減することができます。日付と時刻の列を新しい形式にアップグレードするために、ALTER TABLE <table_name> FORCE; コマンドを日付と時刻の列を含む各テーブルに実行します。テーブルを変更すると、テーブルが読み取り専用としてロックされるため、この更新はメンテナンス時間中に実行することをお勧めします。

datetimetime、または timestamp 列を含むすべてのテーブルをデータベース内で検索し、角テーブルに ALTER TABLE <table_name> FORCE; コマンドを作成するには、次のクエリを使用します。

SET show_old_temporals = ON; SELECT table_schema, table_name,column_name, column_type FROM information_schema.columns WHERE column_type LIKE '%/* 5.5 binary format */'; SET show_old_temporals = OFF;

MySQL 5.7 から 8.0 へのアップグレードの事前確認

MySQL 8.0 には MySQL 5.7 との非互換性がいくつかあります。このような非互換性が原因で MySQL 5.7 から MySQL 8.0 へのアップグレード中に問題が生じる可能性があります。そのため、アップグレードを成功させるには、データベースで何らかの準備が必要になる場合があります。このような非互換性の一般的なリストを以下に示します。

  • テーブルで古いデータ型や関数を使用してはいけません。

  • 孤立した *.frm ファイルがあってはいけません。

  • トリガーの definer が欠落しているか、空である、またはトリガーに無効な作成コンテキストが含まれていてはいけません。

  • ネイティブのパーティショニングをサポートしていないストレージエンジンを使用するパーティショニングされたテーブルがあってはいけません。

  • キーワードや予約語に違反してはいけません。MySQL 8.0 では、以前に予約されていなかったキーワードもあります。

    詳細については、MySQL ドキュメントの「キーワードと予約語」を参照してください。

  • MySQL 5.7 の mysql システムデータベースに、MySQL 8.0 データディクショナリで使用されるテーブルと同じ名前のテーブルがあってはいけません。

  • sql_mode システム可変設定で、古い SQL モードを定義してはいけません。

  • 長さが 255 文字または 1,020 バイトを超える ENUM または SET 列要素をそれぞれ持つテーブルまたはストアドプロシージャがあってはいけません。

  • MySQL 8.0.13 以降にアップグレードする前に、共有 InnoDB テーブルスペースに存在するテーブルパーティションがあってはいけません。

  • ASC 句に DESC または GROUP BY 修飾子を使用する、MySQL 8.0.12 以前のクエリおよびストアドプログラム定義があってはなりません。

  • MySQL 8.0でサポートされていない機能を MySQL 5.7 のインストールで使用することはできません。

    詳細については、MySQL ドキュメントの「MySQL 8.0 で削除された機能」を参照してください。

  • 64 文字を超える外部キーの制約名があってはいけません。

  • Unicode サポートの向上のため、utf8mb3 文字セットを使用するオブジェクトを、utf8mb4 文字セットを使用するように変換することを検討してください。utf8mb3 文字セットは非推奨です。また、utf8 の代わりに utf8mb4 を文字セット参照に使用することを検討してください。現在 utf8utf8mb3 文字セットのエイリアスであるためです。

    詳細については、MySQL ドキュメントの「utf8mb3 文字セット (3 バイトの UTF-8 Unicode エンコード)」を参照してください。

MySQL 5.7 から 8.0 へのアップグレードをスタートすると、Amazon RDS では、これらの非互換性を検出するために自動的に事前チェックが実行されます。MySQL 8.0 へのアップグレードについては、MySQL ドキュメントの「MySQL のアップグレード」を参照してください。

これらの事前確認は必須です。スキップすることはできません。事前チェックには次の利点があります。

事前チェックには、MySQL に含まれている証明書と Amazon RDS チーム用によって特別に作成された証明書が含まれます。MySQL が提供する事前確認については、Upgrade Checker Utility」を参照してください。

DB インスタンスがアップグレードで停止される前に事前チェックが実行されます。つまり、実行時にダウンタイムが発生することはありません。事前チェックで非互換性が見つかった場合、DB インスタンスが停止する前に、Amazon RDS により自動的にアップグレードがキャンセルされます。Amazon RDS では、非互換性のためのイベントも生成されます。Amazon RDS イベントの詳細については、「Amazon RDS イベント通知の操作」を参照してください。

Amazon RDS は、ログファイル PrePatchCompatibility.log に各非互換性に関する詳細情報を記録します。ほとんどの場合、ログエントリには非互換性を修正するための MySQL のドキュメントへのリンクが含まれています。ログの表示の詳細については、「データベースログファイルの表示とリスト化」を参照してください。

事前チェックの性質上、データベース内のオブジェクトが分析されます。この分析によりリソースが消費され、アップグレードが完了するまでの時間が長くなります。

注記

Amazon RDS では MySQL 5.7 から MySQL 8.0 へのアップグレードに対してのみ、これらのすべての事前チェックを実行します。MySQL 5.6 から MySQL 5.7 へのアップグレードでは、事前チェックは、孤立したテーブルがないこと、およびテーブルを再構築するのに十分なストレージ領域があることを確認することに限られます。MySQL 5.7 よりも前のリリースへのアップグレードでは、事前チェックは実行されません。

MySQL 5.7 から 8.0 へのアップグレードに失敗した後のロールバック

DB インスタンスを MySQL バージョン 5.7 から MySQL バージョン 8.0 にアップグレードすると、アップグレードが失敗することがあります。特に、事前チェックでキャプチャされなかった非互換性がデータディクショナリに含まれていると、失敗する可能性があります。この場合、データベースは新しい MySQL 8.0 バージョンで正常に起動できません。この時点で、Amazon RDS は、アップグレードに対して実行された変更をロールバックします。ロールバック後、MySQL DB インスタンスは MySQL バージョン 5.7 を実行しています。アップグレードが失敗してロールバックされると、Amazon RDS は、イベント ID RDS-EVENT-0188 のイベントを生成します。

通常、DB インスタンス内のデータベースとターゲットの MySQL バージョン間のメタデータに非互換性があるため、アップグレードは失敗します。アップグレードが失敗した場合、upgradeFailure.log ファイルでこのような互換性に関する詳細を確認できます。アップグレードを再試行する前に、非互換性を解決してください。

アップグレードの試行とロールバックが失敗すると、DB インスタンスが再起動されます。保留中のパラメータの変更は、再起動時に適用され、ロールバック後も保持されます。

MySQL 8.0 へのアップグレードの詳細については、MySQL ドキュメントの次のトピックを参照してください。

注記

現在、アップグレード失敗後の自動ロールバックは、MySQL 5.7 から 8.0 へのメジャーバージョンアップグレードでのみサポートされています。

アップグレードをテストする

DB インスタンスでメジャーバージョンアップグレードを実行する前に、新しいバージョンとの互換性についてデータベースを徹底的にテストしてください。また、データベースにアクセスするすべてのアプリケーションの新しいバージョンとの互換性についても徹底的にテストします。以下の手順を実行することをお勧めします。

メジャーバージョンのアップグレードをテストするには
  1. データベースエンジンの新しいバージョンについてアップグレードドキュメントを参照して、データベースやアプリケーションに影響を与える可能性のある互換性の問題があるかどうかを確認します。

  2. DB インスタンスがカスタム DB パラメータグループに関連付けられている場合は、新しいメジャーバージョンと互換性のある既存の設定で新しい DB パラメータグループを作成します。その新しい DB パラメータグループをテストインスタンスのアップグレード時に指定することで、アップグレードのテストでインスタンスが正常に機能することを確認できます。DB パラメータグループの作成の詳細については、「「パラメータグループを使用する」 」を参照してください。

  3. アップグレードする DB インスタンスの DB スナップショットを作成します。詳細については、「シングル AZ DB インスタンスの DB スナップショットの作成」を参照してください。

  4. DB スナップショットを復元して、新しいテスト DB インスタンスを作成します。詳細については、「DB スナップショットからの復元」を参照してください。

  5. この新しいテスト DB インスタンスを変更して新しいバージョンにアップグレードするには、次に説明するいずれかの方法を使用します。ステップ 2 で新しいパラメータグループを作成した場合は、そのパラメータグループを指定します。

  6. アップグレードしたインスタンスによって使用されるストレージを評価して、アップグレードに追加のストレージが必要かどうかを判断します。

  7. データベースとアプリケーションが新しいバージョンで正常に動作することが確認されるまで、アップグレードした DB インスタンスに対する品質保証テストを必要な回数だけ実行します。ステップ 1 で特定した互換性の問題の影響を評価するための新しいテストを実行します。すべてのストアドプロシージャと関数をテストします。アプリケーションのテストバージョンを、アップグレードした DB インスタンスに割り振ります。

  8. すべてのテストに合格したら、本稼働 DB インスタンスのアップグレードを実行します。すべてが正常に動作していることを確認するまでは、DB インスタンスへの書き込みオペレーションは許可しないことをお勧めします。

MySQL DB インスタンスをアップグレードする

MySQL DB インスタンスの手動または自動アップグレードについては、「DB インスタンスのエンジンバージョンのアップグレード」を参照してください。

MySQL のマイナーバージョンの自動アップグレード

DB インスタンスの作成または変更時に次の設定を指定すると、DB インスタンスを自動的にアップグレードできます。

  • [マイナーバージョンの自動アップグレード] の設定は有効です。

  • バックアップ保持期間の設定は 0 より大きいです。

AWS Management Consoleの場合、これらの設定はAAdditional configuration (追加設定) の下にあります。下図は、Auto minor version upgrade (自動マイナーバージョンアップグレード) 設定を示しています。


                マイナーバージョン自動アップグレードの設定

これらの設定の詳細については、「DB インスタンスの設定」をご参照ください。

一部の AWS リージョン の RDS for MySQL メジャーバージョンでは、RDS によって 1 つのマイナーバージョンが自動アップグレードバージョンとして指定されます。Amazon RDS でマイナーバージョンのテストと承認が完了すると、メンテナンスウィンドウの間にマイナーバージョンアップグレードが自動的に行われます。RDS では、新しくリリースされたマイナーバージョンが自動アップグレードバージョンとして自動的に設定されることはありません。RDS によって新しい自動アップグレードバージョンが指定される前に、以下のような複数の基準が考慮されます。

  • 既知のセキュリティの問題

  • MySQL コミュニティバージョンのバグ

  • マイナーバージョンがリリースされてからのフリート全体の安定性

次の AWS CLI コマンドを使用して、特定の AWS リージョン で指定された MySQL マイナーバージョンの現在の自動マイナーアップグレードターゲットバージョンを確認できます。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine mysql \ --engine-version minor-version \ --region region \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output text

Windows の場合:

aws rds describe-db-engine-versions ^ --engine mysql ^ --engine-version minor-version ^ --region region ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^ --output text

例えば、次の AWS CLI コマンドにより、米国東部 (オハイオ)AWS リージョン (us-east-2) の MySQL マイナーバージョン 8.0.11 の自動マイナーアップグレードターゲットを特定できます。

Linux、macOS、Unix の場合:

aws rds describe-db-engine-versions \ --engine mysql \ --engine-version 8.0.11 \ --region us-east-2 \ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" \ --output table

Windows の場合:

aws rds describe-db-engine-versions ^ --engine mysql ^ --engine-version 8.0.11 ^ --region us-east-2 ^ --query "DBEngineVersions[*].ValidUpgradeTarget[*].{AutoUpgrade:AutoUpgrade,EngineVersion:EngineVersion}" ^ --output table

以下のような出力が生成されます。

---------------------------------- | DescribeDBEngineVersions | +--------------+-----------------+ | AutoUpgrade | EngineVersion | +--------------+-----------------+ | False | 8.0.15 | | False | 8.0.16 | | False | 8.0.17 | | False | 8.0.19 | | False | 8.0.20 | | False | 8.0.21 | | True | 8.0.23 | | False | 8.0.25 | +--------------+-----------------+

この例では、MySQL バージョン 8.0.23 のAutoUpgrade値はTrueです。したがって、自動マイナーアップグレードターゲットは MySQL バージョン 8.0.23 であり、出力でハイライトされています。

MySQL DB インスタンスは、以下の基準を満たしている場合、メンテナンスウィンドウの間に自動的にアップグレードされます。

  • [マイナーバージョンの自動アップグレード] の設定は有効です。

  • バックアップ保持期間の設定は 0 より大きいです。

  • DB インスタンスでは、現在の自動アップグレードマイナーバージョン未満の DB エンジンのマイナーバージョンが実行されています。

詳細については、「マイナーエンジンバージョンの自動アップグレード」を参照してください。

MySQL データベースのアップグレード時にリードレプリカを使用したダウンタイムの短縮

ほとんどの場合、MySQL DB インスタンスをアップグレードする際のダウンタイムを減らすには、ブルー/グリーンデプロイが最適なオプションです。詳細については、「データベース更新のために Amazon RDS ブルー/グリーンデプロイを使用する」を参照してください。

ブルー/グリーンデプロイを使用できず、MySQL DB インスタンスが現在本稼働アプリケーションで使用されている場合は、次の手順を使用して DB インスタンスのデータベースバージョンをアップグレードできます。この手順により、アプリケーションの停止時間を短縮できます。

リードレプリカを使用して、ほとんどのメンテナンスステップを事前に実行し、実際の停止中に必要な変更を最小限に抑えることができます。この方法で、既存の DB インスタンスを変更せずに、新しい DB インスタンスのテストおよび準備ができます。

次の手順は、MySQL バージョン 5.7 から MySQL バージョン 8.0 へのアップグレードの例です。他のメジャーバージョンへのアップグレードに、この同じ一般的なステップを使用できます。

注記

MySQL バージョン 5.7 から MySQL バージョン 8.0 にアップグレードする場合、アップグレードを実行する前に事前確認を完了してください。詳細については、「MySQL 5.7 から 8.0 へのアップグレードの事前確認」を参照してください。

DB インスタンスの使用中に MySQL データベースをアップグレードするには
  1. AWS Management Consoleにサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. MySQL 5.7 DB インスタンスのリードレプリカを作成します。このプロセスにより、データベースのアップグレード可能なコピーが作成されます。DB インスタンスの他のリードレプリカも存在する場合があります。

    1. コンソールで [データベース] を選択し、アップグレードする DB インスタンスを選択します。

    2. [アクション] で [リードレプリカの作成] を選択します。

    3. リードレプリカの [DB インスタンス識別子] の値を指定し、[DB インスタンスクラス] などの設定が MySQL 5.7 DB インスタンスと一致することを確認します。

    4. [Create read replica] を選択します。

  3. (オプション) リードレプリカが作成され、ステータスが [利用可能] になったら、リードレプリカをマルチ AZ 配置に変換し、バックアップを有効にします。

    デフォルトでは、リードレプリカは、バックアップが無効なシングル AZ デプロイとして作成されます。リードレプリカは最終的に本番 DB インスタンスになるため、ベストプラクティスは、マルチ AZ デプロイを設定し、すぐにバックアップを有効にすることです。

    1. コンソールで [データベース] を選択し、作成したばかりのリードレプリカを選択します。

    2. Modify を選択します。

    3. マルチ AZ 配置で、[スタンバイインスタンスの作成] を選択します。

    4. [Backup Retention Period] (バックアップ保持期間) として、0 以外の正の値 (3 日など) を選択し、[Continue] (続行) を選択します。

    5. [変更のスケジューリング] で、[すぐに適用] を選択します。

    6. [DB インスタンスの変更] を選択します。

  4. リードレプリカのステータスが [利用可能] になったら、リードレプリカを MySQL 8.0 にアップグレードします。

    1. コンソールで [データベース] を選択し、作成したばかりのリードレプリカを選択します。

    2. Modify を選択します。

    3. [DB エンジンのバージョン] で、アップグレードする MySQL 8.0 のバージョンを選択し、[続行] を選択します。

    4. [変更のスケジューリング] で、[すぐに適用] を選択します。

    5. [Modify DB instance] を選択してアップグレードをスタートします。

  5. アップグレードが完了し、[ステータス] が [利用可能] になったら、アップグレードしたリードレプリカがソース MySQL 5.7 DB インスタンスで最新であることを確認します。確認するには、リードレプリカに接続して、SHOW REPLICA STATUS コマンドを実行します。Seconds_Behind_Master フィールドが 0 である場合、レプリカは更新されています。

    注記

    MySQL の旧バージョンは、SHOW REPLICA STATUS ではなく SHOW SLAVE STATUS を使用していました。8.0.23 より前の MySQL バージョンを使用している場合は、SHOW SLAVE STATUS を使用します。

  6. (オプション) リードレプリカのリードレプリカを作成します。

    DB インスタンスをスタンドアロン DB インスタンスに昇格した後、リードレプリカを追加する場合、すぐにリードレプリカを作成できます。

    1. コンソールで [データベース] を選択し、アップグレードしたばかりのリードレプリカを選択します。

    2. [アクション] で [リードレプリカの作成] を選択します。

    3. リードレプリカの [DB インスタンス識別子] の値を指定し、[DB インスタンスクラス] などの設定が MySQL 5.7 DB インスタンスと一致することを確認します。

    4. [Create read replica] を選択します。

  7. (オプション) リードレプリカのカスタム DB パラメータグループを設定します。

    DB インスタンスをスタンドアロン DB インスタンスに昇格した後、カスタムパラメータグループを使用する場合、すぐにDB パラメータグループを作成して、リードレプリカに関連付けられます。

    1. MySQL 8.0 のカスタム DB パラメータグループを作成します。手順については、「DB パラメータグループを作成する」を参照してください。

    2. 作成したばかりの DB パラメータグループで変更するパラメータを変更します。手順については、「DB パラメータグループのパラメータの変更」を参照してください。

    3. コンソールで [データベース] を選択し、リードレプリカを選択します。

    4. Modify を選択します。

    5. [DB パラメータグループ] で、作成したばかりの MySQL 8.0 DB パラメータグループを選択し、[続行] を選択します。

    6. [変更のスケジューリング] で、[すぐに適用] を選択します。

    7. [Modify DB instance] を選択してアップグレードをスタートします。

  8. MySQL 8.0 リードレプリカをスタンドアロン DB インスタンスにします。

    重要

    MySQL 8.0 のリードレプリカをスタンドアロン DB インスタンスに昇格すると、MySQL 5.7 DB インスタンスのレプリカではなくなります。MySQL 8.0 のリードレプリカの昇格は、ソース MySQL 5.7 DB インスタンスが読み取り専用モードで、すべての書き込みオペレーションが停止されているメンテナンスウィンドウ中に実行することをお勧めします。昇格が完了したら、アップグレードした MySQL 8.0 DB インスタンスに書き込みオペレーションを割り振ることで、書き込みオペレーションが失われないようにします。

    また、MySQL 8.0 のリードレプリカの昇格前に、必要なすべてのデータ定義言語 (DDL) のオペレーションを MySQL 8.0 のリードレプリカで実行することをお勧めします。例えば、インデックスの作成があります。これにより、昇格後の MySQL 8.0 のリードレプリカのパフォーマンスへの悪影響を避けることができます。リードレプリカを昇格させるには、次の手順に従います。

    1. コンソールで [データベース] を選択し、アップグレードしたばかりのリードレプリカを選択します。

    2. [アクション] で、[Promote (昇格)] を選択します。

    3. [はい] を選択して、リードレプリカインスタンスの自動バックアップを有効にします。詳細については、「バックアップの概要」を参照してください。

    4. Continue (続行) をクリックします。

    5. [Promote Read Replica] を選択します。

  9. これで、MySQL データベースのアップグレードバージョンが作成されました。この時点で、アプリケーションを新しい MySQL 8.0 DB インスタンスに割り振ることができます。