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

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

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

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

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

ご使用の MySQL DB インスタンスでリードレプリケーションを使用している場合は、ソースインスタンスのアップグレード前に、すべてのリードレプリカをアップグレードする必要があります。DB インスタンスがマルチ AZ 配置にある場合、プライマリとスタンバイのレプリカの両方がアップグレードされます。アップグレードが完了するまで、DB インスタンスは使用できなくなります。

注記

データベースエンジンをアップグレードするには、ダウンタイムが必要です。ダウンタイムの時間は、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 バージョン 5.6.43 DB インスタンスの有効なアップグレードターゲットを特定するには、次の AWS CLI コマンドを実行します。

Linux、macOS、Unix の場合:

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

Windows の場合:

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

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

注記

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

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

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

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

DB インスタンスがマルチ AZ 配置にある場合は、プライマリとスタンバイの両方の DB インスタンスがアップグレードされます。プライマリとスタンバイの DB インスタンスは同時にアップグレードされ、アップグレードが完了するまで停止します。停止時間は、データベースエンジン、エンジンのバージョン、DB インスタンスのサイズによって異なります。

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 インスタンスクラス」を参照してください。

Amazon RDS では、2022 年 2 月 1 日に MySQL 5.6 のサポートが廃止される予定です。MySQL 5.6 DB インスタンスの MySQL 5.7 への自動アップグレードは、2022 年 3 月 1 日に開始します。詳細については、「MySQL バージョン 5.6 の廃止」を参照してください。

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 instanceへの更新の適用」を参照してください。

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; コマンドを作成するには、次のクエリを使用します。

SELECT DISTINCT CONCAT('ALTER TABLE `', REPLACE(is_tables.TABLE_SCHEMA, '`', '``'), '`.`', REPLACE(is_tables.TABLE_NAME, '`', '``'), '` FORCE;') FROM information_schema.TABLES is_tables INNER JOIN information_schema.COLUMNS col ON col.TABLE_SCHEMA = is_tables.TABLE_SCHEMA AND col.TABLE_NAME = is_tables.TABLE_NAME LEFT OUTER JOIN information_schema.INNODB_SYS_TABLES systables ON SUBSTRING_INDEX(systables.NAME, '#', 1) = CONCAT(is_tables.TABLE_SCHEMA,'/',is_tables.TABLE_NAME) LEFT OUTER JOIN information_schema.INNODB_SYS_COLUMNS syscolumns ON syscolumns.TABLE_ID = systables.TABLE_ID AND syscolumns.NAME = col.COLUMN_NAME WHERE col.COLUMN_TYPE IN ('time','timestamp','datetime') AND is_tables.TABLE_TYPE = 'BASE TABLE' AND is_tables.TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema') AND (is_tables.ENGINE = 'InnoDB' AND syscolumns.MTYPE = 6);

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 文字セットは廃止されました。また、utf8mb4 の代わりに utf8 を文字セット参照に使用することを検討してください。現在 utf8utf8mb3 文字セットの別名であるためです。

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

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

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

  • アップグレード中の計画外のダウンタイムを回避することができます。

  • 非互換性がある場合、Amazon RDS でアップグレードすることはできません。詳細を示すログが出力されます。ログを使用して、MySQL 8.0 にアップグレードするためのデータベースを準備するには、非互換性を排除します。非互換性の削除の詳細については、MySQL ドキュメントの「アップグレードのためのインストールの準備」と MySQL Server Blog の「MySQL 8.0 にアップグレードする場合に必要な確認事項」を参照してください。

事前チェックには、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 パラメータグループの作成の詳細については、「DB パラメータグループを使用する」を参照してください。

  3. アップグレードする DB インスタンスの 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 より大きいです。

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

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

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

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

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

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

aws rds describe-db-engine-versions --output=table --engine mysql --engine-version minor-version --region region

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

aws rds describe-db-engine-versions --output=table --engine mysql --engine-version 5.7.19 --region us-east-2

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

----------------------------------------------------------------------------------------- | DescribeDBEngineVersions | +---------------------------------------------------------------------------------------+ || DBEngineVersions || |+-------------------------------------------------+-----------------------------------+| || DBEngineDescription | MySQL Community Edition || || DBEngineVersionDescription | mysql 5.7.19 || || DBParameterGroupFamily | mysql5.7 || || Engine | mysql || || EngineVersion | 5.7.19 || || Status | available || || SupportsGlobalDatabases | False || || SupportsLogExportsToCloudwatchLogs | True || || SupportsParallelQuery | False || || SupportsReadReplica | True || |+-------------------------------------------------+-----------------------------------+| ||| ExportableLogTypes ||| ||+-----------------------------------------------------------------------------------+|| ||| audit ||| ||| error ||| ||| general ||| ||| slowquery ||| ||+-----------------------------------------------------------------------------------+|| ||| ValidUpgradeTarget ||| ||+-------------+---------------+---------+----------------+--------------------------+|| ||| AutoUpgrade | Description | Engine | EngineVersion | IsMajorVersionUpgrade ||| ||+-------------+---------------+---------+----------------+--------------------------+|| ||| False | MySQL 5.7.21 | mysql | 5.7.21 | False ||| ||| False | MySQL 5.7.22 | mysql | 5.7.22 | False ||| ||| False | | mysql | 5.7.23 | False ||| ||| False | MySQL 5.7.24 | mysql | 5.7.24 | False ||| ||| False | MySQL 5.7.25 | mysql | 5.7.25 | False ||| ||| True | MySQL 5.7.26 | mysql | 5.7.26 | False ||| ||| False | MySQL 5.7.28 | mysql | 5.7.28 | False ||| ||| False | MySQL 5.7.30 | mysql | 5.7.30 | False ||| ||| False | MySQL 5.7.31 | mysql | 5.7.31 | False ||| ||| False | MySQL 8.0.11 | mysql | 8.0.11 | True ||| ||| False | MySQL 8.0.13 | mysql | 8.0.13 | True ||| ||| False | MySQL 8.0.15 | mysql | 8.0.15 | True ||| ||| False | MySQL 8.0.16 | mysql | 8.0.16 | True ||| ||| False | MySQL 8.0.17 | mysql | 8.0.17 | True ||| ||| False | MySQL 8.0.19 | mysql | 8.0.19 | True ||| ||| False | MySQL 8.0.20 | mysql | 8.0.20 | True ||| ||| False | MySQL 8.0.21 | mysql | 8.0.21 | True ||| ||+-------------+---------------+---------+----------------+--------------------------+||

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

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

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

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

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

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

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

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. [バックアップ保持期間] で、0 以外の正の値 (3 日など) を選択し、続行を選択します。

    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 SLAVE STATUS ではなく SHOW REPLICA 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. [続行] をクリックします。

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

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