

# RDS for MySQL DB エンジンのアップグレード
<a name="USER_UpgradeDBInstance.MySQL"></a>

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

**メジャーバージョンのアップグレード**  
*メジャーバージョンのアップグレード*には、既存のアプリケーションとの下位互換性のないデータベースの変更が含まれる場合があります。そのため、DB インスタンスのメジャーバージョンアップグレードは手動で実行する必要があります。メジャーバージョンアップグレードをスタートするには、DB インスタンスを変更します。メジャーバージョンのアップグレードを行う前に、「[RDS for MySQL のメジャーバージョンのアップグレード](USER_UpgradeDBInstance.MySQL.Major.md)」の手順を実行することをお勧めします。  
マルチ AZ DB インスタンスデプロイのメジャーバージョンアップグレードの場合、Amazon RDS はプライマリレプリカとスタンバイレプリカを同時にアップグレードします。アップグレードが完了するまで、DB インスタンスは使用できなくなります。マルチ AZ DB クラスターデプロイのメジャーバージョンアップグレードの場合、Amazon RDS はクラスターメンバーインスタンスを一度に 1 つずつアップグレードします。  
ブルー/グリーンデプロイを使用することで、メジャーバージョンアップグレードに必要なダウンタイムを最小限に抑えることができます。詳細については、「[データベース更新のために Amazon RDS ブルー/グリーンデプロイを使用する](blue-green-deployments.md)」を参照してください。

**マイナーバージョンのアップグレード**  
*マイナーバージョンアップグレード*には、既存のアプリケーションとの下位互換性がある変更のみが含まれます。マイナーバージョンのアップグレードを手動でスタートするには、DB インスタンスを変更します。または、DB インスタンスの作成時または変更時に、**[マイナーバージョン自動アップグレード**] を有効にすることができます。これにより、Amazon RDS は、新しいバージョンがテストおよび承認されると、DB インスタンスを自動的にアップグレードします。アップグレードの実行については、「[DB インスタンスのエンジンバージョンのアップグレード](USER_UpgradeDBInstance.Upgrading.md)」を参照してください。  
マルチ AZ DB クラスターのマイナーバージョンアップグレードを実行すると、Amazon RDS はリーダー DB インスタンスを一度に 1 つずつアップグレードします。その後、リーダー DB インスタンスの 1 つが新しいライター DB インスタンスに切り替わります。次に、Amazon RDS は、古いライターインスタンス (今ではリーダーインスタンス) をアップグレードします。  
マルチ AZ DB *インスタンス*デプロイのマイナーバージョンアップグレードのダウンタイムは、数分続く場合があります。マルチ AZ DB クラスターは、通常、マイナーバージョンアップグレードのダウンタイムを約 35 秒に短縮します。RDS Proxy と併用すると、ダウンタイムをさらに 1 秒以下に短縮できます。詳細については、「[Amazon RDS Proxy ](rds-proxy.md)」を参照してください。または、[ProxySQL](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-of-downtime-with-proxysql-when-upgrading-amazon-rds-multi-az-deployments-with-two-readable-standbys/)、[PgBouncer](https://aws.amazon.com/blogs/database/fast-switchovers-with-pgbouncer-on-amazon-rds-multi-az-deployments-with-two-readable-standbys-for-postgresql/)、[AWS Advanced JDBC Wrapper Driver](https://aws.amazon.com/blogs/database/achieve-one-second-or-less-downtime-with-the-advanced-jdbc-wrapper-driver-when-upgrading-amazon-rds-multi-az-db-clusters/) などのオープンソースデータベースプロキシを使用することもできます。

Amazon RDS は、複数のデータベースリソースと AWS アカウントにわたるマイナーバージョンの自動アップグレードを管理するためのアップグレードロールアウトポリシーもサポートしています。詳細については、「[自動マイナーバージョンアップグレードの AWS Organizations アップグレードロールアウトポリシーの使用](RDS.Maintenance.AMVU.UpgradeRollout.md)」を参照してください。

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

**Topics**
+ [

## MySQL アップグレードに関する考慮事項
](#USER_UpgradeDBInstance.MySQL.Considerations)
+ [

## 有効なアップグレードターゲットの検索
](#USER_UpgradeDBInstance.MySQL.FindingTargets)
+ [

# MySQL バージョン番号
](USER_UpgradeDBInstance.MySQL.VersionID.md)
+ [

# RDS for MySQL の RDS バージョン番号
](USER_UpgradeDBInstance.MySQL.rds.version.md)
+ [

# RDS for MySQL のメジャーバージョンのアップグレード
](USER_UpgradeDBInstance.MySQL.Major.md)
+ [

# RDS for MySQL アップグレードのテスト
](USER_UpgradeDBInstance.MySQL.UpgradeTesting.md)
+ [

## MySQL DB インスタンスをアップグレードする
](#USER_UpgradeDBInstance.MySQL.Upgrading)
+ [

# RDS for MySQL のマイナーバージョンの自動アップグレード
](USER_UpgradeDBInstance.MySQL.Minor.md)
+ [

# RDS for MySQL データベースのアップグレード時にリードレプリカを使用したダウンタイムの短縮
](USER_UpgradeDBInstance.MySQL.ReducedDowntime.md)
+ [

# イベントによる RDS for MySQL エンジンのアップグレードのモニタリング
](USER_UpgradeDBInstance.MySQL.Monitoring.md)

## MySQL アップグレードに関する考慮事項
<a name="USER_UpgradeDBInstance.MySQL.Considerations"></a>

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 インスタンスを変更する](Overview.DBInstance.Modifying.md)」を参照してください。

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

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

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

## 有効なアップグレードターゲットの検索
<a name="USER_UpgradeDBInstance.MySQL.FindingTargets"></a>

AWS マネジメントコンソール を使用して 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
```

# MySQL バージョン番号
<a name="USER_UpgradeDBInstance.MySQL.VersionID"></a>

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

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

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

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

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

次の表に、RDS for MySQL バージョン 8.4 の命名スキームを示します。


| 8.4 マイナーバージョン | 命名スキーム | 
| --- | --- | 
|  ≥ 3  |  新しい DB インスタンスは、*major.minor.patch.YYMMDD* を使用します。例えば、8.4.3.R2.20241201 です。 既存の DB インスタンスは、次のメジャーまたはマイナーバージョンアップグレードまで、8.4.3.R2 など、*major.minor.patch* を使用する場合があります。 | 

次の表に、RDS for MySQL バージョン 8.0 の命名スキームを示します。


| 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 です。  | 

次の表に、RDS for MySQL バージョン 5.7 の命名スキームを示します。


| 5.7 マイナーバージョン | 命名スキーム | 
| --- | --- | 
|  ≥ 42  |  新しい DB インスタンスは、*major.minor.patch.YYMMDD* を使用します。例えば、5.7.42.R2.20231201 です。 既存の DB インスタンスは、次のメジャーまたはマイナーバージョンアップグレードまで、5.7.42.R2 など、*major.minor.patch* を使用する場合があります。  | 

# RDS for MySQL の RDS バージョン番号
<a name="USER_UpgradeDBInstance.MySQL.rds.version"></a>

RDS バージョン番号は `major.minor.patch` または `major.minor.patch.YYYYMMDD` 命名規則を使用します。Amazon RDS 延長サポートバージョンでは、*minor-RDS.YYYYMMDD* というマイナーバージョン命名スキームを使用します。

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

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)
```

# RDS for MySQL のメジャーバージョンのアップグレード
<a name="USER_UpgradeDBInstance.MySQL.Major"></a>

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

**注記**  
最新世代の DB インスタンスクラスと現行世代の DB インスタンスクラスでは、MySQL バージョン 5.7、8.0、および 8.4 の DB インスタンスのみ作成できます。  
場合によっては、旧世代の DB インスタンスクラスで実行されている DB インスタンスを、それ以降のバージョンの MySQL エンジンを使用した DB インスタンスにアップグレードする必要があります。このような場合は、まず最新世代または現行世代の DB インスタンスクラスを使用するように DB インスタンスを変更します。変更したら、上位バージョンの MySQL データベースエンジンを使用するように DB インスタンスを変更してください。Amazon RDS DB インスタンスクラスについては、「[ DB インスタンスクラス](Concepts.DBInstanceClass.md)」を参照してください。

**Topics**
+ [

## MySQL のメジャーバージョンのアップグレードの概要
](#USER_UpgradeDBInstance.MySQL.Major.Overview)
+ [

## アップグレードの事前チェック
](#USER_UpgradeDBInstance.MySQL.Prechecks)
+ [

## アップグレードに失敗した後のロールバック
](#USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure)

## MySQL のメジャーバージョンのアップグレードの概要
<a name="USER_UpgradeDBInstance.MySQL.Major.Overview"></a>

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

メジャーバージョンアップグレードを実行するには、最初に OS アップデートを実行します。OS のアップデートが完了したら、それぞれのメジャーバージョン (例えば 5.7 から 8.0、8.0 から 8.4 など) にアップグレードします。RDS for MySQL マルチ AZ DB クラスターのアップグレードについては、「[Amazon RDS のマルチ AZ DB クラスターのエンジンバージョンのアップグレード](multi-az-db-clusters-upgrading.md)」を参照してください。2014 年 4 月 24 日以前に作成された MySQL DB は、更新が適用されるまで使用可能な OS の更新を表示します。OS 更新の詳細については、「[DB インスタンスへの更新の適用](USER_UpgradeDBInstance.Maintenance.md#USER_UpgradeDBInstance.OSUpgrades)」を参照してください。

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

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

## アップグレードの事前チェック
<a name="USER_UpgradeDBInstance.MySQL.Prechecks"></a>

Amazon RDS は、アップグレード前に事前チェックを実行して非互換性を確認します。これらの非互換性は、アップグレード先の MySQL バージョンによって異なります。

事前チェックには、MySQL に含まれている証明書と Amazon RDS チーム用によって特別に作成された証明書が含まれます。MySQL が提供する事前確認については、[Upgrade Checker Utility](https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-shell-utilities-upgrade.html)」を参照してください。

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

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

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

**Topics**
+ [

### MySQL 8.0 から 8.4 へのアップグレードの事前確認
](#USER_UpgradeDBInstance.MySQL.80to84Prechecks)
+ [

### MySQL 5.7 から 8.0 へのアップグレードの事前確認
](#USER_UpgradeDBInstance.MySQL.57to80Prechecks)

### MySQL 8.0 から 8.4 へのアップグレードの事前確認
<a name="USER_UpgradeDBInstance.MySQL.80to84Prechecks"></a>

MySQL 8.4 には MySQL 8.0 との非互換性がいくつかあります。このような非互換性が原因で MySQL 8.0 から MySQL 8.4 へのアップグレード中に問題が生じる可能性があります。そのため、アップグレードを成功させるには、データベースで何らかの準備が必要になる場合があります。このような非互換性の一般的なリストを以下に示します。
+ テーブルで古いデータ型や関数を使用してはいけません。
+ トリガーの definer が欠落しているか、空である、またはトリガーに無効な作成コンテキストが含まれていてはいけません。
+ キーワードや予約語に違反してはいけません。MySQL 8.4 では、以前に予約されていなかったキーワードもあります。

  詳細については、MySQL ドキュメントの「[キーワードと予約語](https://dev.mysql.com/doc/refman/8.4/en/keywords.html)」を参照してください。
+ MySQL 8.0 の `mysql` システムデータベースに、MySQL 8.4 データディクショナリで使用されるテーブルと同じ名前のテーブルがあってはいけません。
+ `sql_mode` システム可変設定で、古い SQL モードを定義してはいけません。
+ 長さが 255 文字または 1,020 バイトを超える `ENUM` または `SET` 列要素をそれぞれ持つテーブルまたはストアドプロシージャがあってはいけません。
+ MySQL 8.4 でサポートされていない機能を MySQL 8.0 のインストールで使用することはできません。

  詳細については、MySQL ドキュメントの「[MySQL 8.4 で削除された機能](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html#mysql-nutshell-removals)」を参照してください。
+ 64 文字を超える外部キーの制約名があってはいけません。
+ Unicode サポートを改善するには、次の情報を確認してください。
  + `utf8mb3` 文字セットを使用するオブジェクトを、`utf8mb4` 文字セットを使用するように変換することを検討してください。`utf8mb3` 文字セットは廃止されました。
  + 文字セット参照に `utf8mb4` を `utf8` の代わりに使用することを検討してください。現在 `utf8` は `utf8mb3` 文字セットの別名であるためです。可能であれば、まず `utf8` を `utf8mb4` に変更してから、データベースをアップグレードします。
  + 古いクライアントは `utf8mb3` に対して不明な文字セットエラーを受け取る可能性があるため、データベースをアップグレードする前にデータベースクライアントをアップグレードしてください。

  詳細については、MySQL ドキュメントの「[utf8mb3 文字セット (3 バイトの UTF-8 Unicode エンコード)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)」を参照してください。

  文字セットを変更するには、データベースのバックアップ、復元、レプリケーションを手動で実行できます。または、Amazon RDS のブルー/グリーンデプロイを使用できます。詳細については、「[データベース更新のために Amazon RDS ブルー/グリーンデプロイを使用する](blue-green-deployments.md)」を参照してください。

MySQL 8.0 から 8.4 へのアップグレードをスタートすると、Amazon RDS では、これらの非互換性を検出するために自動的に事前チェックが実行されます。MySQL 8.4 へのアップグレードについては、MySQL ドキュメントの「[MySQL のアップグレード](https://dev.mysql.com/doc/refman/8.4/en/upgrading.html)」を参照してください。

これらの事前確認は必須です。スキップすることはできません。事前チェックには次の利点があります。
+ アップグレード中の計画外のダウンタイムを回避することができます。
+ 非互換性がある場合、Amazon RDS でアップグレードすることはできません。詳細を示すログが出力されます。ログを使用して、非互換性を排除することにより、データベースを MySQL 8.4 にアップグレードする準備を行うことができます。非互換性の排除の詳細については、MySQL ドキュメントの「[アップグレードのためのインストールの準備](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)」を参照してください。

### MySQL 5.7 から 8.0 へのアップグレードの事前確認
<a name="USER_UpgradeDBInstance.MySQL.57to80Prechecks"></a>

MySQL 8.0 には MySQL 5.7 との非互換性がいくつかあります。このような非互換性が原因で MySQL 5.7 から MySQL 8.0 へのアップグレード中に問題が生じる可能性があります。そのため、アップグレードを成功させるには、データベースで何らかの準備が必要になる場合があります。このような非互換性の一般的なリストを以下に示します。
+ テーブルで古いデータ型や関数を使用してはいけません。
+ 孤立した \$1.frm ファイルがあってはいけません。
+ トリガーの definer が欠落しているか、空である、またはトリガーに無効な作成コンテキストが含まれていてはいけません。
+ ネイティブのパーティショニングをサポートしていないストレージエンジンを使用するパーティショニングされたテーブルがあってはいけません。
+ キーワードや予約語に違反してはいけません。MySQL 8.0 では、以前に予約されていなかったキーワードもあります。

  詳細については、MySQL ドキュメントの「[キーワードと予約語](https://dev.mysql.com/doc/refman/8.0/en/keywords.html)」を参照してください。
+ 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 で削除された機能](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals)」を参照してください。
+ 64 文字を超える外部キーの制約名があってはいけません。
+ Unicode サポートを改善するには、次の情報を確認してください。
  + `utf8mb3` 文字セットを使用するオブジェクトを、`utf8mb4` 文字セットを使用するように変換することを検討してください。`utf8mb3` 文字セットは廃止されました。
  + 文字セット参照に `utf8mb4` を `utf8` の代わりに使用することを検討してください。現在 `utf8` は `utf8mb3` 文字セットの別名であるためです。可能であれば、まず `utf8` を `utf8mb4` に変更してから、データベースをアップグレードします。
  + 古いクライアントは `utf8mb3` に対して不明な文字セットエラーを受け取る可能性があるため、データベースをアップグレードする前にデータベースクライアントをアップグレードしてください。

  詳細については、MySQL ドキュメントの「[utf8mb3 文字セット (3 バイトの UTF-8 Unicode エンコード)](https://dev.mysql.com/doc/refman/8.4/en/charset-unicode-utf8mb3.html)」を参照してください。

  文字セットを変更するには、データベースのバックアップ、復元、レプリケーションを手動で実行できます。または、Amazon RDS のブルー/グリーンデプロイを使用できます。詳細については、「[データベース更新のために Amazon RDS ブルー/グリーンデプロイを使用する](blue-green-deployments.md)」を参照してください。

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

これらの事前確認は必須です。スキップすることはできません。事前チェックには次の利点があります。
+ アップグレード中の計画外のダウンタイムを回避することができます。
+ 非互換性がある場合、Amazon RDS でアップグレードすることはできません。詳細を示すログが出力されます。ログを使用して、非互換性を排除することにより、データベースを MySQL 8.0 にアップグレードする準備を行うことができます。非互換性の排除の詳細については、MySQL ドキュメントの「[アップグレードのためのインストールの準備](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)」と「[MySQL 8.0? へのアップグレード」を参照してください。MySQL Server ブログの「知っておくべきこと](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)」を参照してください。

## アップグレードに失敗した後のロールバック
<a name="USER_UpgradeDBInstance.MySQL.Major.RollbackAfterFailure"></a>

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

アップグレードが失敗してロールバックされると、Amazon RDS は、イベント ID RDS-EVENT-0188 のイベントを生成します。

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

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

MySQL 8.0 へのアップグレードの詳細については、MySQL ドキュメントの次のトピックを参照してください。
+ [アップグレードのためのインストールの準備](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)
+ [ MySQL 8.0 にアップグレードしますか? こちらをお読みください.](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/).。

MySQL 8.4 へのアップグレードの詳細については、MySQL ドキュメントの「[アップグレードのためのインストールの準備](https://dev.mysql.com/doc/refman/8.4/en/upgrade-prerequisites.html)」を参照してください。

# RDS for MySQL アップグレードのテスト
<a name="USER_UpgradeDBInstance.MySQL.UpgradeTesting"></a>

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

**メジャーバージョンのアップグレードをテストするには**

1. データベースエンジンの新しいバージョンについてアップグレードドキュメントを参照して、データベースやアプリケーションに影響を与える可能性のある互換性の問題があるかどうかを確認します。
   +  [MySQL 5.7 での変更](http://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html) 
   +  [MySQL 8.0 での変更](http://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) 
   + [MySQL 8.4 での変更](http://dev.mysql.com/doc/refman/8.4/en/upgrading-from-previous-series.html) 

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

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

1. DB スナップショットを復元して、新しいテスト DB インスタンスを作成します。詳細については、「[DB インスタンスへの復元](USER_RestoreFromSnapshot.md)」を参照してください。

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

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

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

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

## MySQL DB インスタンスをアップグレードする
<a name="USER_UpgradeDBInstance.MySQL.Upgrading"></a>

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

# RDS for MySQL のマイナーバージョンの自動アップグレード
<a name="USER_UpgradeDBInstance.MySQL.Minor"></a>

DB インスタンスの作成または変更時に次の設定を指定すると、DB インスタンスを自動的にアップグレードできます。
+ [**マイナーバージョンの自動アップグレード**] の設定は有効です。
+ **バックアップ保持期間**の設定は 0 より大きいです。

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

![\[Amazon RDS コンソールの [メンテナンス] セクション。[マイナーバージョンの自動アップグレードを有効にする] が選択されています。\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/images/amvu.png)


これらの設定の詳細については、「[DB インスタンスの設定](USER_ModifyInstance.Settings.md)」をご参照ください。

一部の 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 エンジンのマイナーバージョンが実行されています。

詳細については、「[マイナーエンジンバージョンの自動アップグレード](USER_UpgradeDBInstance.Upgrading.md#USER_UpgradeDBInstance.Upgrading.AutoMinorVersionUpgrades)」を参照してください。

# RDS for MySQL データベースのアップグレード時にリードレプリカを使用したダウンタイムの短縮
<a name="USER_UpgradeDBInstance.MySQL.ReducedDowntime"></a>

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

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

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

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

**注記**  
MySQL バージョン 5.7 から MySQL バージョン 8.0、または MySQL バージョン 8.0 から MySQL バージョン 8.4 にアップグレードする場合、アップグレードを実行する前に事前確認を完了してください。詳細については、[MySQL 5.7 から 8.0 へのアップグレードの事前確認](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.57to80Prechecks)および[MySQL 8.0 から 8.4 へのアップグレードの事前確認](USER_UpgradeDBInstance.MySQL.Major.md#USER_UpgradeDBInstance.MySQL.80to84Prechecks)を参照してください。

**DB インスタンスの使用中に MySQL データベースをアップグレードするには**

1. AWS マネジメントコンソール にサインインし、Amazon RDS コンソール [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/) を開きます。

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

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

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

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

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

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

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

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

   1. **Modify** を選択します。

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

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

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

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

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

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

   1. **Modify** を選択します。

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

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

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

1. アップグレードが完了し、[**ステータス**] が [**利用可能**] になったら、アップグレードしたリードレプリカがソース 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` を使用します。

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

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

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

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

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

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

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

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

   1. MySQL 8.0 のカスタム DB パラメータグループを作成します。手順については、「[Amazon RDS での DB パラメータグループの作成](USER_WorkingWithParamGroups.Creating.md)」を参照してください。

   1. 作成したばかりの DB パラメータグループで変更するパラメータを変更します。手順については、「[Amazon RDS の DB パラメータグループのパラメータの変更](USER_WorkingWithParamGroups.Modifying.md)」を参照してください。

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

   1. **Modify** を選択します。

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

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

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

1. 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. コンソールで [**データベース**] を選択し、アップグレードしたばかりのリードレプリカを選択します。

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

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

   1. **[Continue]** (続行) をクリックします。

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

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

# イベントによる RDS for MySQL エンジンのアップグレードのモニタリング
<a name="USER_UpgradeDBInstance.MySQL.Monitoring"></a>

RDS for MySQL データベースのエンジンバージョンをアップグレードすると、Amazon RDS はプロセスの各フェーズで特定のイベントを発行します。アップグレードの進行状況を追跡するには、これらのイベントを表示またはサブスクライブします。

 RDS イベントの詳細については、「[Amazon RDS イベントのモニタリング](working-with-events.md)」を参照してください。

エンジンのアップグレード中に発生する特定の Amazon RDS イベントの詳細については、「[ Amazon RDS イベントカテゴリとイベントメッセージ](USER_Events.Messages.md)」を参照してください。