

# Amazon Aurora MySQL DB クラスターのメジャーバージョンのアップグレード
<a name="AuroraMySQL.Updates.MajorVersionUpgrade"></a><a name="mvu"></a>

3.04.1 などの Aurora MySQL バージョン番号では、3 がメジャーバージョンを表します。Aurora MySQL バージョン 2 は MySQL 5.7 との互換性があります。Aurora MySQL バージョン 3 は MySQL 8.0 との互換性があります。

メジャーバージョン間のアップグレードでは、マイナーバージョンよりも広範な計画とテストが必要です。このプロセスにはかなりの時間がかかることがあります。アップグレードの完了後に、フォローアップ作業が必要な場合もあります。例えば、これは SQL 互換性の違いや、特定の MySQL 関連機能の動作方法の違いが原因で発生する可能性があります。または、古いバージョンと新しいバージョンでパラメータ設定が異なることが原因である可能性があります。

**Contents**
+ [

## Aurora MySQL バージョン 2 からバージョン 3 へのアップグレード
](#AuroraMySQL.Updates.MajorVersionUpgrade.2to3)
+ [

## Aurora MySQL メジャーバージョンのアップグレードプロセス
](#AuroraMySQL.Upgrading.Compatibility)
+ [

## メジャーバージョンの Aurora MySQL インプレースアップグレードの仕組み
](#AuroraMySQL.Upgrading.Sequence)
+ [

## Aurora MySQL クラスターのメジャーバージョンアップグレードの計画
](#AuroraMySQL.Upgrading.Planning)
  + [

### DB クラスターのクローン作成によるアップグレードのシミュレーション
](#AuroraMySQL.Upgrading.Planning.clone)
  + [

### ブルー/グリーンデプロイ
](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [

# Aurora MySQL のメジャーバージョンアップグレードの事前チェック
](AuroraMySQL.upgrade-prechecks.md)
  + [

## Aurora MySQL の事前チェックプロセス
](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.process)
  + [

## Aurora MySQL の事前チェックのログ形式
](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-format)
  + [

## Aurora MySQL の事前チェックログ出力例
](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-examples)
  + [

## Aurora MySQL の事前チェックパフォーマンス
](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.performance)
  + [

## コミュニティ MySQL アップグレードの事前チェックの概要
](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.community)
  + [

## Aurora MySQL アップグレードの事前チェックの概要
](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.ams)
  + [

# Aurora MySQL の事前チェックの説明リファレンス
](AuroraMySQL.upgrade-prechecks.descriptions.md)
    + [

## エラー
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
      + [

### エラーを報告する MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
      + [

### エラーを報告する Aurora MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
    + [

## 警告
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
      + [

### 警告を報告する MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
      + [

### 警告を報告する Aurora MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
    + [

## 注意
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
    + [

## エラー、警告、または通知
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)
+ [

# インプレースアップグレードの実行手順
](AuroraMySQL.Upgrading.Procedure.md)
  + [

## インプレースアップグレードはクラスターのパラメータグループにどのような影響を与えるか
](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups)
  + [

## Aurora MySQL バージョン間のクラスターのプロパティの変更
](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs)
  + [

## グローバルデータベースのインプレースメジャーアップグレード
](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.GlobalDB)
  + [

## バックトラックに関する考慮事項
](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Backtrack)
+ [

# Aurora MySQL インプレースアップグレードのチュートリアル
](AuroraMySQL.Upgrading.Tutorial.md)
+ [

# Aurora MySQL メジャーバージョンアップグレードが失敗する理由を確認する
](AuroraMySQL.Upgrading.failure-events.md)
+ [

# Aurora MySQL インプレースアップグレードのトラブルシューティング
](AuroraMySQL.Upgrading.Troubleshooting.md)
+ [

# Aurora MySQL バージョン 3 のアップグレード後のクリーンアップ
](AuroraMySQL.mysql80-post-upgrade.md)
  + [

## 空間インデックス
](AuroraMySQL.mysql80-post-upgrade.md#AuroraMySQL.mysql80-spatial)

## Aurora MySQL バージョン 2 からバージョン 3 へのアップグレード
<a name="AuroraMySQL.Updates.MajorVersionUpgrade.2to3"></a>

MySQL 5.7 互換のクラスターがあり、それを MySQL-8.0 互換クラスターにアップグレードする場合は、クラスター自体でアップグレードプロセスを実行します。この種のアップグレードは、新しいクラスターを作成して行うアップグレードとは対照的な*インプレースアップグレード*です。この手法では、クラスターのエンドポイントやその他の特性を保持します。アップグレードは、すべてのデータを新しいクラスターボリュームにコピーする必要がないため、比較的高速で実行できます。この安定性により、アプリケーションの構成の変更を最小限に抑えることができます。また、アップグレードしたクラスターのテスト量を減らすことができます。これは、DB インスタンスとそのインスタンスクラス数はすべて同じままになるためです。

インプレースアップグレードのメカニズムでは、オペレーションの実行中に DB クラスターをシャットダウンする必要があります。Aurora はクリーンシャットダウンを実行し、トランザクションのロールバックやパージの取り消しなどの未処理のオペレーションを完了します。詳細については、「[メジャーバージョンの Aurora MySQL インプレースアップグレードの仕組み](#AuroraMySQL.Upgrading.Sequence)」を参照してください。

インプレースアップグレード手順は簡単に実行でき、関連するアプリケーションでの構成の変更を最小限に抑えることができるため有用です。例えば、インプレースアップグレードでは、クラスターのエンドポイントと一連の DB インスタンスが保持されます。ただし、インプレースアップグレードの所要時間は、スキーマのプロパティとクラスターのビジー状態によって異なります。したがって、クラスターのニーズに応じて、複数のアップグレード方法から選択できます。
+ [インプレースアップグレード](AuroraMySQL.Upgrading.Procedure.md)
+ [ブルー/グリーンデプロイ](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [スナップショット復元](aurora-restore-snapshot.md)
**注記**  
スナップショット復元のアップグレード手順に AWS CLI または RDS API を使用する場合、後続のオペレーションを実行して、復元された DB クラスターにライター DB インスタンスを作成する必要があります。

Aurora MySQL バージョン 3 および新機能に関する一般的な情報については、「[Aurora MySQL バージョン 3 は MYSQL 8.0 との互換性があります。](AuroraMySQL.MySQL80.md)」を参照してください。

アップグレードの計画の詳細については、「[Aurora MySQL クラスターのメジャーバージョンアップグレードの計画](#AuroraMySQL.Upgrading.Planning)」と「[インプレースアップグレードの実行手順](AuroraMySQL.Upgrading.Procedure.md)」を参照してください。

## Aurora MySQL メジャーバージョンのアップグレードプロセス
<a name="AuroraMySQL.Upgrading.Compatibility"></a>

すべての種類またはバージョンの Aurora MySQL クラスターでインプレースアップグレードメカニズムを使用できるわけではありません。次の表を参照して、各 Aurora MySQL クラスターの適切なアップグレードパスを確認してください。


|  Aurora MySQL DB クラスターのタイプ  | インプレースアップグレードを使用できますか? |  Action  | 
| --- | --- | --- | 
|   Aurora MySQL プロビジョニングクラスター、バージョン 2  |  はい  |  インプレースアップグレードは、MySQL 5.7 互換 Aurora MySQL クラスターでサポートされます。 Aurora MySQL バージョン 3 へのアップグレードの詳細については、[Aurora MySQL クラスターのメジャーバージョンアップグレードの計画](#AuroraMySQL.Upgrading.Planning) と [インプレースアップグレードの実行手順](AuroraMySQL.Upgrading.Procedure.md) を参照してください。  | 
|   Aurora MySQL プロビジョニングクラスター、バージョン 3  |  該当しない  |  Aurora MySQL バージョン 3 バージョン間でアップグレードするには、マイナーバージョンアップグレード手順を使用してください。  | 
|  Aurora Serverless v1 クラスター  |  該当しない  |  Aurora Serverless v1 はバージョン 2 でのみ Aurora MySQL でサポートされています。  | 
|  Aurora Serverless v2 クラスター  |  該当しない  | Aurora Serverless v2 はバージョン 3 でのみ Aurora MySQL でサポートされています。 | 
|  Aurora Global Database のクラスター  |  はい  |  Aurora MySQL をバージョン 2 からバージョン 3 にアップグレードするには、Aurora グローバルデータベースでクラスターの[インプレースアップグレードを実行する手順](AuroraMySQL.Upgrading.Procedure.md)に従います。グローバルクラスターでアップグレードを実行します。Aurora は、グローバルデータベースのプライマリクラスター、ならびにすべてのセカンダリクラスターに対し、同時に自動アップグレードを実行します。 AWS CLI または RDS API を使用する場合は、`modify-global-cluster` または `ModifyGlobalCluster` の代わりに `modify-db-cluster` コマンドまたは `ModifyDBCluster` オペレーションを呼び出します。 `lower_case_table_names` パラメータをデフォルトに設定してグローバルデータベースを再起動する場合にのみ、Aurora MySQL バージョン 2 からバージョン 3 へのインプレースアップグレードを実行できます。詳細については、「[メジャーバージョンのアップグレード](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major)」を参照してください。  | 
|  パラレルクエリクラスター  |  はい  |  インプレースアップグレードを実行できます。  | 
|  バイナリログレプリケーションのターゲットのクラスター  |  おそらく  |  バイナリログのレプリケーションが Aurora MySQL クラスターからのものであれば、インプレースアップグレードを実行できます。バイナリログのレプリケーションが RDS for MySQL またはオンプレミス MySQL DB インスタンスからのものである場合は、アップグレードを実行できません。その場合は、スナップショットの復元メカニズムを使用してアップグレードします。  | 
|  DB インスタンスがゼロのクラスター  |  いいえ  |  AWS CLI または RDS API を使用すると、DB インスタンスをアタッチせずに、 Aurora MySQL クラスターを作成できます。同様に、クラスターボリューム内のデータをそのまま残しつつ、Aurora MySQL クラスターからすべての DB インスタンスを削除することもできます。クラスターに DB インスタンスがない場合、インプレースアップグレードを実行することはできません。 アップグレードメカニズムでは、システムテーブルやデータファイルなどに対して変換を実行するため、クラスターのライターインスタンスが必要です。この場合、AWS CLI または RDS API を使用して、クラスターのライターインスタンスを作成します。その後、インプレースアップグレードを実行します。  | 
|  バックトラックが有効なクラスター  |  はい  |  バックトラック機能を使用する Aurora MySQL クラスターのインプレースアップグレードを実行できます。ただし、アップグレード後は、クラスターをアップグレード前の時間までバックトラックすることはできません。  | 

## メジャーバージョンの Aurora MySQL インプレースアップグレードの仕組み
<a name="AuroraMySQL.Upgrading.Sequence"></a>

 Aurora MySQL は、メジャーバージョンのアップグレードを多段階プロセスとして実行します。アップグレードの現在のステータスを確認できます。アップグレードの一部のステップでは、進捗情報も確認できます。各ステージのスタート時に、Aurora MySQL によってイベントが記録されます。RDS コンソールの [**イベント**] ページで、発生したイベントを確認できます。イベントの使用の詳細については、「[Amazon RDS イベント通知の操作](USER_Events.md)」を参照してください。

**重要**  
 プロセスがスタートされると、アップグレードが成功または失敗するまで実行されます。進行中は、アップグレードをキャンセルできません。アップグレードが失敗した場合、Aurora はすべての変更をロールバックし、クラスターのエンジンバージョン、メタデータなどが前と同じ状態になります。

 アップグレードプロセスには、3 つのステージがあります。

1.  Aurora は、アップグレードプロセスをスタートする前に一連の[事前チェック](AuroraMySQL.upgrade-prechecks.md)を実行します。Aurora がこれらのチェックを実行している間、クラスターは実行を続けます。例えば、クラスターは、準備済みステートメントの XA トランザクションを使用したり、データ定義言語 (DDL) ステートメントを処理したりすることはできません。例えば、特定の種類の SQL ステートメントを送信中のアプリケーションをシャットダウンする必要がある場合があります。または、長時間実行される特定のステートメントが終了するまで待たなければならない可能性もあります。その場合は、アップグレードを再試行してください。一部のチェックでは、アップグレードの妨げにはならないものの、アップグレードに長時間かかる可能性がある条件をテストします。

    Aurora で必要な条件が満たされていないことが検出された場合は、イベントの詳細に示されている条件を変更します。[Aurora MySQL インプレースアップグレードのトラブルシューティング](AuroraMySQL.Upgrading.Troubleshooting.md) のガイダンスに従います。Aurora で、アップグレードを遅らせる原因となる条件が検出された場合は、長期間にわたりアップグレードをモニタリングすることを計画します。

1.  Aurora はクラスターをオフラインにします。次に、Aurora が前のステージと同様の一連のテストを実行し、シャットダウンプロセス中に新たな問題が発生していないことを確認します。この時点で、Aurora がアップグレードの妨げになる条件を検出した場合、Aurora はアップグレードをキャンセルし、クラスターをオンラインに戻します。この場合、条件がいつから適用されていないかを確認し、アップグレードを再度スタートします。

1.  Aurora は、クラスターボリュームのスナップショットを作成します。アップグレードの完了後に、互換性やその他の種類の問題を発見したとします。または、元のクラスターとアップグレードされたクラスターの両方を使用してテストを実行するとします。このような場合、このスナップショットから復元し、元のエンジンバージョンと元のデータを使用して新しいクラスターを作成することができます。
**ヒント**  
このスナップショットは手動スナップショットです。ただし、Aurora は、手動スナップショットのクォータに達した場合でも、それを作成してアップグレードプロセスを続行することができます。このスナップショットは、削除するまで永続的に残ります (必要な場合)。アップグレード後のテストをすべて完了したら、このスナップショットを削除してストレージ料金を最小限に抑えることができます。

1.  クラスターボリュームの Aurora クローンを作成します。クローン作成は、実際のテーブルデータのコピーを伴わない高速オペレーションです。アップグレード中、Aurora に問題が発生すると、クローンが作成されたクラスターボリュームから元のデータに戻り、クラスターをオンラインに戻します。アップグレード中のクローン作成の一時ボリュームは、単一のクラスターボリュームでの通常のクローン数の制限を受けません。

1.  Aurora は、ライター DB インスタンスのクリーンシャットダウンを実行します。クリーンシャットダウン中は、以下のオペレーションの進行状況イベントが 15 分ごとに記録されます。RDS コンソールの [**イベント**] ページで、発生したイベントを確認できます。
   +  Aurora は、古いバージョンの行の UNDO レコードを消去します。
   +  Aurora は、コミットされていないトランザクションをロールバックします。

1.  Aurora は、ライター DB インスタンスのエンジンバージョンをアップグレードします。
   +  Aurora は、新しいエンジンバージョンのバイナリをライター DB インスタンスにインストールします。
   +  Aurora は、ライター DB インスタンスを使用して、データを MySQL 5.7 互換のフォーマットにアップグレードします。このステージでは、Aurora によってシステムテーブルが変更され、クラスターボリュームのデータに影響を与えるその他の変換が実行されます。特に、Aurora はシステムテーブル内のパーティションのメタデータをアップグレードして、MySQL 5.7 のパーティションのフォーマットとの互換性を持たせます。クラスター内のテーブルに多数のパーティションがある場合、このステージには長時間かかります。

      このステージでエラーが発生した場合は、MySQL エラーログで詳細を確認できます。このステージのスタート後に何らかの理由でアップグレードプロセスが失敗した場合、Aurora はクローンが作成されたクラスターボリュームから元のデータを復元します。

1.  Aurora は、リーダー DB インスタンスのエンジンバージョンをアップグレードします。

1.  アップグレードプロセスは完了しました。アップグレードプロセスが正常に完了したことを示す最終イベントが、Aurora により記録されます。DB クラスターが新しいメジャーバージョンで実行されています。

## Aurora MySQL クラスターのメジャーバージョンアップグレードの計画
<a name="AuroraMySQL.Upgrading.Planning"></a>

アップグレードの適切な時期とアプローチを決定するには、Aurora MySQL バージョン 3 と現在の環境の違いを確認できます。
+ RDS for MySQL 8.0 または MySQL 8.0 Community Edition から変換する場合は、「[Aurora MySQL バージョン 3 と MySQL 8.0 コミュニティエディションの比較](AuroraMySQL.Compare-80-v3.md)」を参照してください。
+ Aurora MySQL バージョン 2、RDS for MySQL 5.7、またはコミュニティ MySQL 5.7 からアップグレードする場合は、「[Aurora MySQL バージョン 2 と Aurora MySQL バージョン 3 の比較](AuroraMySQL.Compare-v2-v3.md)」を参照してください。
+ カスタムパラメータグループの新しい MySQL 8.0 互換バージョンを作成します。必要なカスタムパラメータ値を新しいパラメータグループに適用します。[Aurora MySQL バージョン 3 のパラメータ変更](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.mysql80-parameter-changes) に相談して、パラメータの変更について学びます。
+ MySQL 8.0 Community Edition で導入された新しい予約キーワードの使用方法について、Aurora MySQL バージョン 2 のデータベーススキーマとオブジェクト定義を確認してください。アップグレードの前に行ってください。詳細については、MySQL ドキュメントの「[MySQL 8.0 の新しいキーワードと予約語](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0)」を参照してください。

MySQL 固有のアップグレードに関する考慮事項とヒントについては、*MySQL リファレンスマニュアル*の [MySQL 8.0 での変更](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html)を参照してください。例えば、コマンド `mysqlcheck --check-upgrade` を使用して、既存の Aurora MySQL データベースを分析し、潜在的なアップグレードの問題を特定します。

**注記**  
インプレースアップグレードまたはスナップショット復元技術を使用して Aurora MySQL バージョン 3 にアップグレードする場合は、大きな DB インスタンスクラスを使用することをお勧めします。例として、db.r5.24xlarge、db.r6g.16xlarge があります。これにより、DB インスタンスで使用可能な CPU 容量の大部分を使用して、アップグレードプロセスをより早く完了できます。メジャーバージョンのアップグレード完了後、必要な DB インスタンスクラスに変更できます。

アップグレード自体を完了したら、「[Aurora MySQL バージョン 3 のアップグレード後のクリーンアップ](AuroraMySQL.mysql80-post-upgrade.md)」のアップグレード後の手順に従います。最後に、アプリケーションの機能とパフォーマンスをテストします。

RDS from MySQL またはコミュニティ MySQL から変換する場合は、「[Amazon Aurora MySQL DB クラスターへのデータの移行](AuroraMySQL.Migrating.md)」で説明している移行手順に従います。場合によっては、バイナリログレプリケーションを使用して、移行の一環として Aurora MySQL バージョン 3 クラスターとデータを同期することがあります。その場合、ソースシステムはターゲット DB クラスターとの互換性があるバージョンを実行する必要があります。

クラスターをメジャーバージョン間でアップグレードした後、アプリケーションと管理手順をスムーズに動作させるには、事前のプランと準備が必要です。AWS CLI スクリプトまたは RDS API ベースのアプリケーションの更新に使用する管理コードの種類については、「[インプレースアップグレードはクラスターのパラメータグループにどのような影響を与えるか](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups)」を参照してください。また、「[Aurora MySQL バージョン間のクラスターのプロパティの変更](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs)」も参照してください。

アップグレード中に発生する可能性がある問題については、「[Aurora MySQL インプレースアップグレードのトラブルシューティング](AuroraMySQL.Upgrading.Troubleshooting.md)」を参照してください。アップグレードに長時間を要する可能性がある問題については、これらの条件を事前にテストして修正することができます。

**注記**  
インプレースアップグレードでは、オペレーションの実行中に DB クラスターをシャットダウンする必要があります。Aurora MySQL はクリーンシャットダウンを実行し、UNDO パージなどの未処理のオペレーションを完了します。パージする UNDO レコードが多いと、アップグレードに時間がかかることがあります。履歴リストの長さ (HLL) が短くなった後にのみ、アップグレードを実行することをお勧めします。HLL の一般的な許容値は 100,000 以下です。詳細については、この[ブログ記事](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2)を参照してください。

### DB クラスターのクローン作成によるアップグレードのシミュレーション
<a name="AuroraMySQL.Upgrading.Planning.clone"></a>

アップグレードしたクラスターのアプリケーションの互換性、パフォーマンス、メンテナンス手順、および同様の考慮事項を確認できます。そのためには、実際のアップグレードの実行前に、アップグレードのシミュレーションを実行できます。この手法は、本番稼働用クラスターで特に役に立ちます。ここでは、ダウンタイムを最小限に抑え、アップグレードが完了したらすぐにアップグレードされたクラスターを使用できるようにすることが重要です。

以下のステップを使用します。

1. 元のクラスターのクローンを作成します。「[Amazon Aurora DB クラスターのボリュームのクローン作成](Aurora.Managing.Clone.md)」 の手順に従います。

1. 元のクラスターと同じようなライターおよびリーダー DB インスタンスのセットを設定します。

1. クローンが作成されたクラスターのインプレースアップグレードを実行します。「[インプレースアップグレードの実行手順](AuroraMySQL.Upgrading.Procedure.md)」 の手順に従います。

   クローンを作成したら、すぐにアップグレードをスタートします。これにより、クラスターボリュームは元のクラスターと同じ状態になります。アップグレードの実行前にクローンがアイドル状態になっている場合、Aurora がバックグラウンドでデータベースのクリーンアップ処理を実行します。その場合、クローンのアップグレードは、元のクラスターのアップグレードを正確にシミュレーションしません。

1. クローンが作成されたクラスターを使用して、アプリケーションの互換性、パフォーマンス、管理手順などをテストします。

1. 問題が発生した場合は、それらを考慮してアップグレードの計画を調整してください。例えば、上のバージョンの特徴セットと互換性を持たせるように、任意のアプリケーションコードを適用させます。クラスター内のデータ量を基に、アップグレードにかかる時間を推定します。クラスターがビジーではない時間にアップグレードをスケジュールすることもできます。

1. テストクラスターでアプリケーションとワークロードが適切に動作することが確認できたら、運用クラスターのインプレースアップグレードを実行します。

1. メジャーバージョンのアップグレード中のクラスターの合計ダウンタイムを最小限に抑えます。そのためには、アップグレード時にクラスターのワークロードが低いか、0 であることを確認します。特に、アップグレードのスタート時は、進行中の長時間実行トランザクションがないことを確認してください。

### ブルー/グリーンデプロイ
<a name="AuroraMySQL.UpgradingMajor.BlueGreen"></a>

状況によっては、古いクラスターからアップグレードされたクラスターへの即時の切り替えが最優先事項です。このような場合、古いクラスターと新しいクラスターを並べて実行するマルチステッププロセスを使用できます。ここでは、新しいクラスターが引き継ぐ準備ができるまで、古いクラスターから新しいクラスターにデータをレプリケートします。詳細については、[データベース更新のために Amazon Aurora ブルー/グリーンデプロイを使用する](blue-green-deployments.md) を参照してください

# Aurora MySQL のメジャーバージョンアップグレードの事前チェック
<a name="AuroraMySQL.upgrade-prechecks"></a>

MySQL 5.7 から MySQL 8.0 のように、MySQL をあるメジャーバージョンから別のメジャーバージョンにアップグレードするには、アーキテクチャの大幅な変更が伴うため、慎重な計画と準備が必要です。データベースエンジンソフトウェアの更新や、場合によってはシステムテーブルの更新に主に焦点を当てるマイナーバージョンアップグレードとは異なり、MySQL のメジャーアップグレードでは、データベースのメタデータの保存と管理方法に根本的な変更が加えられることがよくあります。

このような非互換性の特定を支援するために、Aurora MySQL バージョン 2 からバージョン 3 にアップグレードする際、Aurora はアップグレード互換性チェック (事前チェック) を自動的に実行して、データベースクラスター内のオブジェクトを調べ、アップグレードの進行をブロックする可能性のある既知の非互換性を特定します。Aurora MySQL 事前チェックの詳細については、「[Aurora MySQL の事前チェックの説明リファレンス](AuroraMySQL.upgrade-prechecks.descriptions.md)」を参照してください。Aurora 事前チェックは、コミュニティ MySQL [アップグレードチェッカーユーティリティ](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html)で実行されるチェックに加えて実行されます。

これらの事前確認は必須です。スキップすることはできません。事前チェックには次の利点があります。
+ これにより、ダウンタイムの延長につながるアップグレード障害が発生する可能性を減らすことができます。
+ 非互換性がある場合、Amazon Aurora はアップグレードの続行を阻止し、詳細を示すログを出力します。ログを使用して、非互換性を解決することにより、データベースをバージョン 3 にアップグレードする準備を行うことができます。非互換性の解決の詳細については、MySQL ドキュメントの「[Preparing your installation for upgrade](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html)」と「[Upgrading to MySQL 8.0?」を参照してください。MySQL Server ブログの「知っておくべきこと](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/)」を参照してください。

  MySQL 8.0 へのアップグレードの詳細については、MySQL ドキュメントの「[MySQL のアップグレード](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html)」を参照してください。

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

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

**注記**  
事前チェックの性質上、データベース内のオブジェクトが分析されます。この分析によりリソースが消費され、アップグレードが完了するまでの時間が長くなります。事前チェックのパフォーマンスに関する考慮事項の詳細については、「[Aurora MySQL の事前チェックプロセス](#AuroraMySQL.upgrade-prechecks.process)」を参照してください。

**Contents**
+ [

## Aurora MySQL の事前チェックプロセス
](#AuroraMySQL.upgrade-prechecks.process)
+ [

## Aurora MySQL の事前チェックのログ形式
](#AuroraMySQL.upgrade-prechecks.log-format)
+ [

## Aurora MySQL の事前チェックログ出力例
](#AuroraMySQL.upgrade-prechecks.log-examples)
+ [

## Aurora MySQL の事前チェックパフォーマンス
](#AuroraMySQL.upgrade-prechecks.performance)
+ [

## コミュニティ MySQL アップグレードの事前チェックの概要
](#AuroraMySQL.upgrade-prechecks.community)
+ [

## Aurora MySQL アップグレードの事前チェックの概要
](#AuroraMySQL.upgrade-prechecks.ams)
+ [

# Aurora MySQL の事前チェックの説明リファレンス
](AuroraMySQL.upgrade-prechecks.descriptions.md)
  + [

## エラー
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
    + [

### エラーを報告する MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
    + [

### エラーを報告する Aurora MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
  + [

## 警告
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
    + [

### 警告を報告する MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
    + [

### 警告を報告する Aurora MySQL の事前チェック
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
  + [

## 注意
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
  + [

## エラー、警告、または通知
](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)

## Aurora MySQL の事前チェックプロセス
<a name="AuroraMySQL.upgrade-prechecks.process"></a>

前述のように、Aurora MySQL のアップグレードプロセスでは、メジャーバージョンのアップグレードを続行する前に、データベースの互換性チェック (事前チェック) を実行します。

インプレースアップグレードの場合、事前チェックはライター DB インスタンスがオンラインの間に実行されます。事前チェックが成功すると、アップグレードが続行されます。エラーが見つかった場合、`upgrade-prechecks.log` ファイルに記録され、アップグレードはキャンセルされます。アップグレードを再試行する前に、`upgrade-prechecks.log` ファイルで返されたエラーを解決します。

スナップショット復元アップグレードの場合、復元プロセス中に事前チェックが実行されます。成功すると、データベースは新しい Aurora MySQL バージョンにアップグレードされます。エラーが見つかった場合、`upgrade-prechecks.log` ファイルに記録され、アップグレードはキャンセルされます。アップグレードを再試行する前に、`upgrade-prechecks.log` ファイルで返されたエラーを解決します。

詳細については、「[Aurora MySQL メジャーバージョンアップグレードが失敗する理由を確認する](AuroraMySQL.Upgrading.failure-events.md)」および「[Aurora MySQL の事前チェックの説明リファレンス](AuroraMySQL.upgrade-prechecks.descriptions.md)」を参照してください。

事前チェックのステータスをモニタリングするには、DB クラスターで次のイベントを表示できます。


| 事前チェックのステータス | イベントメッセージ | Action | 
| --- | --- | --- | 
|  Started  |  アップグレードの準備中: オンラインアップグレードの事前チェックを開始しました。  | なし | 
|  失敗  |  データベースクラスターはアップグレードできない状態です: アップグレードの事前チェックに失敗しました。詳細については、upgrade-prechecks.log ファイルを参照してください。 アップグレード失敗の原因のトラブルシューティングの詳細については、以下を参照してください。 [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  |  `upgrade-prechecks.log` でエラーを確認します。 エラーを修正します。 アップグレードを再試行します。  | 
|  成功  |  アップグレードの準備中: オンラインアップグレードの事前チェックを完了しました。  |  事前チェックは成功し、エラーは返されませんでした。 `upgrade-prechecks.log` で警告と通知を確認します。  | 

イベントの表示の詳細については、「[Amazon RDS イベントの表示](USER_ListEvents.md)」を参照してください。

## Aurora MySQL の事前チェックのログ形式
<a name="AuroraMySQL.upgrade-prechecks.log-format"></a>

アップグレードの互換性チェック (事前チェック) が完了したら、`upgrade-prechecks.log` ファイルを確認できます。ログファイルには、各事前チェックの結果、影響を受けるオブジェクト、および修復情報が含まれます。

エラーがあると、アップグレードできません。アップグレードを再試行する前に解決する必要があります。

警告や通知はそれほど重要ではありませんが、アプリケーションのワークロードとの互換性の問題がないことを確認するために、注意深く確認することをお勧めします。特定された問題はすぐに対処してください。

ログファイルの形式は次のとおりです。
+ `targetVersion` – Aurora MySQL アップグレードの MySQL 互換バージョンです。
+ `auroraServerVersion` – 事前チェックが実行された Aurora MySQL バージョンです。
+ `auroraTargetVersion` – アップグレード先の Aurora MySQL バージョンです。
+ `checksPerformed` – 実行された事前チェックのリストが含まれています。
+ `id` – 実行中の事前チェックの名前です。
+ `title` – 実行中の事前チェックの説明です。
+ `status` – これは、事前チェックが成功したか失敗したかを示すものではありませんが、事前チェッククエリのステータスを表示します。
  + `OK` – 事前チェッククエリが実行され、正常に完了しました。
  + `ERROR` – 事前チェッククエリの実行に失敗しました。これは、リソースの制約、予期しないインスタンスの再起動、互換性の事前チェッククエリが中断されたなどの問題が原因で発生する可能性があります。

    詳細については、[この例](#precheck-query-failed)を参照してください。
+ `description` – 非互換性の一般的な説明と、問題を修正する方法です。
+ `documentationLink` – 該当する場合、関連する Aurora MySQL または MySQL ドキュメントへのリンクをここに示します。詳細については、「[Aurora MySQL の事前チェックの説明リファレンス](AuroraMySQL.upgrade-prechecks.descriptions.md)」を参照してください。
+ `detectedProblems` – 事前チェックでエラー、警告、または通知が返された場合、該当する場合には非互換性の詳細と非互換オブジェクトが表示されます。
  + `level` – 事前チェックで検出された非互換性のレベルです。有効なレベルは次のとおりです。
    + `Error` – 非互換性を解決するまで、アップグレードを続行することはできません。
    + `Warning` – アップグレードは続行できますが、非推奨のオブジェクト、構文、または設定が検出されました。警告を注意深く確認し、今後のリリースでの問題を避けるため、すぐに解決してください。
    + `Notice` – アップグレードは続行できますが、非推奨のオブジェクト、構文、または設定が検出されました。通知を注意深く確認し、今後のリリースでの問題を避けるため、すぐに解決してください。
  + `dbObject` – 非互換性が検出されたデータベースオブジェクトの名前です。
  + `description` – 非互換性の詳細な説明と、問題の修正方法です。
+ `errorCount` – 検出された非互換性エラーの数です。これらにより、アップグレードがブロックされています。
+ `warningCount` – 検出された非互換性警告の数です。これらはアップグレードをブロックするものではありませんが、今後のリリースでの問題を避けるため、すぐに対処してください。
+ `noticeCount` – 検出された非互換性通知の数です。これらはアップグレードをブロックするものではありませんが、今後のリリースでの問題を避けるため、すぐに対処してください。
+ `Summary` – 事前チェックの互換性エラー、警告、通知数の概要です。

## Aurora MySQL の事前チェックログ出力例
<a name="AuroraMySQL.upgrade-prechecks.log-examples"></a>

次の例は、表示される可能性のある事前チェックログ出力を示しています。実行される事前チェックの詳細については、「[Aurora MySQL の事前チェックの説明リファレンス](AuroraMySQL.upgrade-prechecks.descriptions.md)」を参照してください。

**事前チェックのステータスは OK で、非互換性は検出されませんでした。**  
事前チェッククエリが正常に完了しました。非互換性は検出されませんでした。  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinytext",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny text columns",
  "status": "OK",
  "detectedProblems": []
},
```

**事前チェックのステータスは OK で、エラーが検出されました。**  
事前チェッククエリが正常に完了しました。1 つのエラーが検出されました。  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexes",
  "status": "OK",
  "description": "Consider dropping the prefix indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test25.sbtest1",
        "description": "Table `test25`.`sbtest1` has an index `idx_t1` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `idx_t1` ON `test25`.`sbtest1`;"
      },
 }
```

**事前チェックのステータスは OK で、警告が検出されました。**  
警告は、事前チェックが成功または失敗したときに返されます。  
ここでは、事前チェッククエリが正常に完了しました。2 つの警告が検出されました。  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
    ]
}
```

**事前チェックのステータスは ERROR で、非互換性は報告されていません。**  
事前チェッククエリがエラーで失敗したため、非互換性を検証できませんでした。  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "ERROR",
  "description": "Can't connect to MySQL server on 'localhost:3306' (111) at 13/08/2024 12:22:20 UTC. This failure can occur due to low memory available on the instance for executing upgrade prechecks. Please check 'FreeableMemory' Cloudwatch metric to verify the available memory on the instance while executing prechecks. If instance ran out of memory, we recommend to retry the upgrade on a higher instance class."
}
```
この障害は、予期しないインスタンスの再起動や、データベースで互換性の事前チェッククエリが実行中に中断されたために発生する可能性があります。例えば、小規模な DB インスタンスクラスでは、インスタンスで使用可能なメモリが少なくなると、この状態になることがあります。  
`FreeableMemory` Amazon CloudWatch メトリクスを使用して、事前チェックの実行中にインスタンスで使用可能なメモリを確認できます。インスタンスがメモリ不足になった場合は、より大きな DB インスタンスクラスでアップグレードを再試行することをお勧めします。場合によっては、[ブルー/グリーンデプロイ](blue-green-deployments-overview.md)を使用できます。これにより、システムリソースを消費する本番稼働ワークロードから独立した「グリーン」DB クラスターで事前チェックとアップグレードを実行できます。  
詳細については、「[Aurora MySQL データベースのメモリ使用量に関する問題のトラブルシューティング](ams-workload-memory.md)」を参照してください。

**事前チェックの結果、1 つのエラーと 3 つの警告が検出されました。**  
互換性の事前チェックには、ソースおよびターゲットの Aurora MySQL バージョンに関する情報が含まれており、事前チェック出力の最後にはエラー、警告、通知数の概要があります。  
例えば、次の出力は、Aurora MySQL 2.11.6 から Aurora MySQL 3.07.1 にアップグレードしようとしたことを示しています。アップグレードで 1 つのエラーと 3 つの警告が返され、通知はありませんでした。エラーが返されるとアップグレードを続行できないため、[routineSyntaxCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#routineSyntaxCheck) の互換性の問題を解決し、アップグレードを再試行する必要があります。  

```
{
  "serverAddress": "/tmp%2Fmysql.sock",
  "serverVersion": "5.7.12 - MySQL Community Server (GPL)",
  "targetVersion": "8.0.36",
  "auroraServerVersion": "2.11.6",
  "auroraTargetVersion": "3.07.1",
  "outfilePath": "/rdsdbdata/tmp/PreChecker.log",
  "checksPerformed": [{
      ... output for each individual precheck ...
      .
      .
      {
        "id": "oldTemporalCheck",
        "title": "Usage of old temporal type",
        "status": "OK",
          "detectedProblems": []
      },
      {
        "id": "routinesSyntaxCheck",
        "title": "MySQL 8.0 syntax check for routine-like objects",
        "status": "OK",
        "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
        "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
        "detectedProblems": [{
            "level": "Error",
            "dbObject": "test.select_res_word",
            "description": "at line 2,18: unexpected token 'except'"
        }]
      },
      .
      .
      .
      {
        "id": "zeroDatesCheck",
        "title": "Zero Date, Datetime, and Timestamp values",
        "status": "OK",
        "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
        "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
        "detectedProblems": [{
            "level": "Warning",
            "dbObject": "global.sql_mode",
            "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            },
            {
            "level": "Warning",
            "dbObject": "session.sql_mode",
            "description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            }
          ]
       },
       .
       .
       .
  }],
  "errorCount": 1,
  "warningCount": 3,
  "noticeCount": 0,
  "Summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues."
}
```

## Aurora MySQL の事前チェックパフォーマンス
<a name="AuroraMySQL.upgrade-prechecks.performance"></a>

互換性の事前チェックは、アップグレードのために DB インスタンスがオフラインになる前に実行されるため、通常の状況では、実行中に DB インスタンスのダウンタイムが発生することはありません。ただし、ライター DB インスタンスで実行されているアプリケーションのワークロードに影響を与える可能性があります。事前チェックは、[information\$1schema](https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-introduction.html) テーブルを介してデータディクショナリにアクセスします。これは、データベースオブジェクトが多い場合、遅くなる可能性があります。次の要素を考慮してください。
+ 事前チェックの期間は、テーブル、列、ルーチン、制約などのデータベースオブジェクトの数によって異なります。オブジェクトの数が多い DB クラスターの実行には時間がかかる場合があります。

  例えば、[removedFunctionsCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#removedFunctionsCheck) は、[保存されているオブジェクト](https://dev.mysql.com/doc/refman/5.7/en/stored-objects.html)の数に基づいて、より長い時間がかかり、より多くのリソースを使用する場合があります。
+ インプレースアップグレードでは、より大きな DB インスタンスクラス (db.r5.24xlarge や db.r6g.16xlarge など) を使用すると、より多くの CPU を使用してアップグレードを迅速に完了できます。アップグレード後にダウンサイズできます。
+ 複数のデータベースにわたる `information_schema` に対するクエリは、特にオブジェクトが多く、DB インスタンスが小さい場合に遅くなる可能性があります。このような場合は、アップグレードのためにクローン作成、スナップショット復元、または[ブルー/グリーンデプロイ](blue-green-deployments-overview.md)を使用することを検討してください。
+ 事前チェックのリソース使用量 (CPU、メモリ) は、オブジェクトが増えるほど増加し、DB インスタンスが小さくなるほど実行時間が長くなる可能性があります。このような場合は、アップグレードのためにクローン作成、スナップショット復元、またはブルー/グリーンデプロイの使用をテストすることを検討してください。

  リソース不足が原因で事前チェックが失敗した場合、ステータス出力を使用して、事前チェックログで検出できます。

  ```
  "status": "ERROR",
  ```

詳細については、「[メジャーバージョンの Aurora MySQL インプレースアップグレードの仕組み](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence)」および「[Aurora MySQL クラスターのメジャーバージョンアップグレードの計画](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning)」を参照してください。

## コミュニティ MySQL アップグレードの事前チェックの概要
<a name="AuroraMySQL.upgrade-prechecks.community"></a>

以下は、MySQL 5.7 から 8.0 までの非互換性の一般的なリストです。
+ MySQL 5.7 互換 DB クラスターでは、MySQL 8.0 でサポートされていない機能を使用しないでください。

  詳細については、MySQL ドキュメントの「[MySQL 8.0 で削除された機能](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals)」を参照してください。
+ キーワードや予約語に違反してはいけません。MySQL 8.0 では、以前に予約されていなかったキーワードもあります。

  詳細については、MySQL ドキュメントの「[キーワードと予約語](https://dev.mysql.com/doc/refman/8.0/en/keywords.html)」を参照してください。
+ Unicode サポートの改善のため、`utf8mb3` 文字セットを使用するオブジェクトを、`utf8mb4` 文字セットを使用するように変換することを検討してください。`utf8mb3` 文字セットは廃止されました。また、`utf8mb4` の代わりに `utf8` を文字セット参照に使用することを検討してください。現在 `utf8` は `utf8mb3` 文字セットの別名であるためです。

  詳細については、MySQL ドキュメントの「[utf8mb3 文字セット (3 バイトの UTF-8 Unicode エンコード)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html)」を参照してください。
+ デフォルト以外の行形式の InnoDB テーブルは使用できません。
+ `ZEROFILL` または `display` の長さ型属性は使用できません。
+ ネイティブのパーティショニングをサポートしていないストレージエンジンを使用するパーティショニングされたテーブルがあってはいけません。
+ MySQL 5.7 の `mysql` システムデータベースに、MySQL 8.0 データディクショナリで使用されるテーブルと同じ名前のテーブルがあってはいけません。
+ テーブルで古いデータ型や関数を使用してはいけません。
+ 64 文字を超える外部キーの制約名があってはいけません。
+ `sql_mode` システム可変設定で、古い SQL モードを定義してはいけません。
+ 長さが 255 文字を超える `ENUM` または `SET` 列要素をそれぞれ持つテーブルまたはストアドプロシージャが存在してはいけません。
+ 共有 InnoDB テーブルスペースに存在するテーブルパーティションが存在してはいけません。
+ 表領域データファイルパスに循環参照が存在してはいけません。
+ `ASC` 句に `DESC` または `GROUP BY` 修飾子を使用するクエリおよびストアドプログラム定義が存在してはいけません。
+ 削除されたシステム変数が存在してはならず、システム変数は MySQL 8.0 の新しいデフォルト値を使用する必要があります。
+ ゼロ (`0`) の日付、日時、タイムスタンプ値は使用できません。
+ ファイルの削除または破損によるスキーマの不一致が存在してはいけません。
+ `FTS` 文字列を含むテーブル名が存在してはいけません。
+ 別のエンジンに属する InnoDB テーブルが存在してはいけません。
+ MySQL 5.7 に無効なテーブル名またはスキーマ名が存在してはいけません。

実行される事前チェックの詳細については、「[Aurora MySQL の事前チェックの説明リファレンス](AuroraMySQL.upgrade-prechecks.descriptions.md)」を参照してください。

MySQL 8.0 へのアップグレードの詳細については、MySQL ドキュメントの「[MySQL のアップグレード](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html)」を参照してください。MySQL 8.0 の変更点の一般的な説明については、MySQL ドキュメントの「[What is new in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html)」を参照してください。

## Aurora MySQL アップグレードの事前チェックの概要
<a name="AuroraMySQL.upgrade-prechecks.ams"></a>

バージョン 2 からバージョン 3 にアップグレードする場合、Aurora MySQL には以下のような独自の固有要件があります。
+ ビュー、ルーチン、トリガー、イベントに、`SQL_CACHE`、`SQL_NO_CACHE`、`QUERY_CACHE` などの非推奨の SQL 構文があってはいけません。
+ `FTS` インデックスのないテーブルには `FTS_DOC_ID` 列が存在しない必要があります。
+ InnoDB データディクショナリと実際のテーブル定義の間に列定義の不一致が存在してはいけません。
+ `lower_case_table_names` パラメータが `1` に設定されている場合は、すべてのデータベース名とテーブル名を小文字にする必要があります。
+ イベントとトリガーの definer は欠落していても、空にすることもできず、トリガーに無効な作成コンテキストでもいけません。
+ データベース内のすべてのトリガー名は一意である必要があります。
+ DDL リカバリと高速 DDL は、Aurora MySQL バージョン 3 ではサポートされていません。これらの機能に関連するデータベースにアーティファクトが存在してはいけません。
+ `REDUNDANT` または `COMPACT`行形式のテーブルには、767 バイトを超えるインデックスを含めることはできません。
+ `tiny` テキスト列に定義されているインデックスのプレフィックスの長さは 255 バイトを超えることはできません。`utf8mb4` 文字セットでは、サポートされるプレフィックスの長さは 63 文字に制限されます。

  MySQL 5.7 では、`innodb_large_prefix` パラメータを使用して、より大きなプレフィックス長が許可されていました。このパラメータは MySQL 8.0 では廃止されました。
+ `mysql.host` テーブルに InnoDB メタデータの不整合が存在してはいけません。
+ システムテーブルに列のデータ型の不一致が存在してはいけません。
+ `prepared` 状態の XA トランザクションが存在してはいけません。
+ ビューの列名は 64 文字以下にする必要があります。
+ ストアドプロシージャの特殊文字に一貫性を持たせることはできません。
+ テーブルにデータファイルパスの不整合が存在してはいけません。

実行される事前チェックの詳細については、「[Aurora MySQL の事前チェックの説明リファレンス](AuroraMySQL.upgrade-prechecks.descriptions.md)」を参照してください。

# Aurora MySQL の事前チェックの説明リファレンス
<a name="AuroraMySQL.upgrade-prechecks.descriptions"></a>

Aurora MySQL のアップグレードの事前チェックについては、ここで詳しく説明します。

**Contents**
+ [

## エラー
](#precheck-descriptions-errors)
  + [

### エラーを報告する MySQL の事前チェック
](#precheck-descriptions-errors.mysql)
  + [

### エラーを報告する Aurora MySQL の事前チェック
](#precheck-descriptions-errors.aurora)
+ [

## 警告
](#precheck-descriptions-warnings)
  + [

### 警告を報告する MySQL の事前チェック
](#precheck-descriptions-warnings.mysql)
  + [

### 警告を報告する Aurora MySQL の事前チェック
](#precheck-descriptions-warnings.aurora)
+ [

## 注意
](#precheck-descriptions-notices)
+ [

## エラー、警告、または通知
](#precheck-descriptions-all)

## エラー
<a name="precheck-descriptions-errors"></a>

次の事前チェックは、事前チェックが失敗し、アップグレードを続行できない場合にエラーを生成します。

**Topics**
+ [

### エラーを報告する MySQL の事前チェック
](#precheck-descriptions-errors.mysql)
+ [

### エラーを報告する Aurora MySQL の事前チェック
](#precheck-descriptions-errors.aurora)

### エラーを報告する MySQL の事前チェック
<a name="precheck-descriptions-errors.mysql"></a>

次の事前チェックは、コミュニティ MySQL から提供されています。
+ [checkTableMysqlSchema](#checkTableMysqlSchema)
+ [circularDirectoryCheck](#circularDirectoryCheck)
+ [columnsWhichCannotHaveDefaultsCheck](#columnsWhichCannotHaveDefaultsCheck)
+ [depreciatedSyntaxCheck](#depreciatedSyntaxCheck)
+ [engineMixupCheck](#engineMixupCheck)
+ [enumSetElementLengthCheck](#enumSetElementLengthCheck)
+ [foreignKeyLengthCheck](#foreignKeyLengthCheck)
+ [getDuplicateTriggers](#getDuplicateTriggers)
+ [getEventsWithNullDefiner](#getEventsWithNullDefiner)
+ [getMismatchedMetadata](#getMismatchedMetadata)
+ [getTriggersWithNullDefiner](#getTriggersWithNullDefiner)
+ [getValueOfVariablelower\$1case\$1table\$1names](#getValueOfVariable)
+ [groupByAscSyntaxCheck](#groupByAscSyntaxCheck)
+ [mysqlEmptyDotTableSyntaxCheck](#mysqlEmptyDotTableSyntaxCheck)
+ [mysqlIndexTooLargeCheck](#mysqlIndexTooLargeCheck)
+ [mysqlInvalid57NamesCheck](#mysqlInvalid57NamesCheck)
+ [mysqlOrphanedRoutinesCheck](#mysqlOrphanedRoutinesCheck)
+ [mysqlSchemaCheck](#mysqlSchemaCheck)
+ [nonNativePartitioningCheck](#nonNativePartitioningCheck)
+ [oldTemporalCheck](#oldTemporalCheck)
+ [partitionedTablesInSharedTablespaceCheck](#partitionedTablesInSharedTablespace)
+ [removedFunctionsCheck](#removedFunctionsCheck)
+ [routineSyntaxCheck](#routineSyntaxCheck)
+ [schemaInconsistencyCheck](#schemaInconsistencyCheck)

**checkTableMysqlSchema**  
**事前チェックレベル: Error**  
**`mysql` スキーマの `check table x for upgrade` コマンドによって報告された問題**  
Aurora MySQL バージョン 3 へのアップグレードを開始する前に、`check table for upgrade` が DB インスタンスの `mysql` スキーマ内の各テーブルで実行されます。`check table for upgrade` コマンドは、MySQL の新しいバージョンへのアップグレード中に発生する可能性のある問題がないかテーブルを調べます。アップグレードを試行する前にこのコマンドを実行すると、互換性がない箇所を事前に特定して解決できるため、実際のアップグレードプロセスがよりスムーズになります。  
このコマンドは、次のような各テーブルに対してさまざまなチェックを実行します。  
+ テーブル構造とメタデータがターゲットの MySQL バージョンと互換性があることを確認する
+ テーブルで使用される廃止または削除された機能を確認する
+ データ損失なしでテーブルを適切にアップグレードできることを確認する
詳細については、MySQL ドキュメントの「[CHECK TABLE Statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html)」を参照してください。  
**出力例:**  

```
{
  "id": "checkTableMysqlSchema",
  "title": "Issues reported by 'check table x for upgrade' command for mysql schema.",
  "status": "OK",
  "detectedProblems": []
}
```
`check table for upgrade` は複数のチェックを実行するため、この事前チェックの出力は、発生したエラーと発生したタイミングによって異なります。  
この事前チェックでエラーが発生した場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。

**circularDirectoryCheck**  
**事前チェックレベル: Error**  
**テーブルスペースのデータファイルパスの循環ディレクトリ参照**  
[MySQL 8.0.17](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html) 以降、`CREATE TABLESPACE ... ADD DATAFILE` 句は循環ディレクトリ参照を許可しなくなりました。アップグレードの問題を回避するには、Aurora MySQL バージョン 3 にアップグレードする前に、テーブルスペースのデータファイルパスから循環ディレクトリ参照を削除します。  
**出力例:**  

```
{
  "id": "circularDirectory",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "description": "Error: Following tablespaces contain circular directory references (e.g. the reference '/../') in data file paths which as of MySQL 8.0.17 are not permitted by the CREATE TABLESPACE ... ADD DATAFILE clause. An exception to the restriction exists on Linux, where a circular directory reference is permitted if the preceding directory is a symbolic link. To avoid upgrade issues, remove any circular directory references from tablespace data file paths before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-innodb-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "ts2",
        "description": "circular reference in datafile path: '/home/ec2-user/dbdata/mysql_5_7_44/../ts2.ibd'",
        "dbObjectType": "Tablespace"
      }
  ]
}
```
このエラーが表示された場合は、[file-per-table テーブルスペース](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html)を使用してテーブルを再構築します。すべてのテーブルスペースとテーブル定義にデフォルトのファイルパスを使用します。  
Aurora MySQL は、一般的なテーブルスペースや `CREATE TABLESPACE` コマンドをサポートしていません。  
テーブルスペースを再構築する前に、MySQL ドキュメントの「[Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。
再構築後、事前チェックに合格し、アップグレードを続行できます。  

```
{
  "id": "circularDirectoryCheck",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "detectedProblems": []
},
```

**columnsWhichCannotHaveDefaultsCheck**  
**事前チェックレベル: Error**  
**デフォルト値を設定できない列**  
MySQL 8.0.13 より前のバージョンでは、`BLOB`、`TEXT`、`GEOMETRY`、および `JSON` 列に[デフォルト値](https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html)を含めることはできません。Aurora MySQL バージョン 3 にアップグレードする前に、これらの列のデフォルト句をすべて削除します。これらのデータ型のデフォルト処理の変更についての詳細は、MySQL ドキュメントの「[Data Type Default Values](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html)」を参照してください。  
**出力例:**  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "description": "Error: The following columns are defined as either BLOB, TEXT, GEOMETRY or JSON and have a default value set. These data types cannot have default values in MySQL versions prior to 8.0.13, while starting with 8.0.13, the default value must be specified as an expression. In order to fix this issue, please use the ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT statement.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test_blob_default.geo_col",
        "description": "geometry"
      }
  ]
},
```
`test.test_blob_default` テーブルの `geo_col` 列は、デフォルト値が指定された `BLOB`、`TEXT`、`GEOMETRY`、または `JSON` データ型を使用しているため、事前チェックではエラーが返されます。  
テーブル定義を見ると、`geo_col` 列が `geo_col geometry NOT NULL default ''` として定義されていることがわかります。  

```
mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1
```
このデフォルト句を削除して、事前チェックが合格できるようにします。  
`ALTER TABLE` ステートメントを実行したり、テーブルスペースを再構築したりする前に、MySQL ドキュメントの「[Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。

```
mysql> ALTER TABLE test_blob_default modify COLUMN geo_col geometry NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
```
事前チェックに合格し、アップグレードを再試行できます。  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "detectedProblems": []
},
```

**depreciatedSyntaxCheck**  
**事前チェックレベル: Error**  
**定義での非推奨キーワードの使用**  
MySQL 8.0 では、[クエリキャッシュ](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html)が削除されています。その結果、クエリキャッシュ固有の SQL 構文の一部が削除されました。データベースオブジェクトのいずれかに `QUERY CACHE`、`SQL_CACHE` または `SQL_NO_CACHE` のキーワードが含まれている場合、事前チェックエラーが返されます。この問題を解決するには、これらのオブジェクトを再作成し、前述のキーワードを削除します。  
**出力例:**  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "description": "Error: The following DB objects contain keywords like 'QUERY CACHE', 'SQL_CACHE', 'SQL_NO_CACHE' which are not supported in major version 8.0. It is recommended to drop these DB objects or rebuild without any of the above keywords before upgrade.",
  "detectedProblems": [
      {
"level": "Error",
"dbObject": "test.no_query_cache_check",
"description": "PROCEDURE uses depreciated words in definition"
      }
  ]
}
```
事前チェックでは、`test.no_query_cache_check` ストアドプロシージャが、削除されたキーワードのいずれかを使用していることがレポートされます。プロシージャ定義を見ると、`SQL_NO_CACHE` を使用していることがわかります。  

```
mysql> show create procedure test.no_query_cache_check\G
*************************** 1. row ***************************
           Procedure: no_query_cache_check
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`()
BEGIN
    SELECT SQL_NO_CACHE k from sbtest1 where id > 10 and id < 20 group by k asc;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
キーワードを削除します。  

```
mysql> drop procedure test.no_query_cache_check;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //

mysql> CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN     SELECT k from sbtest1 where id > 10 and id < 20 group by k asc; END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
```
キーワードを削除すると、事前チェックは正常に完了します。  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "detectedProblems": []
}
```

**engineMixupCheck**  
**事前チェックレベル: Error**  
**別のエンジンに属する InnoDB によって認識されるテーブル**  
[schemaInconsistencyCheck](#schemaInconsistencyCheck) と同様、この事前チェックは、アップグレードに進む前に MySQL のテーブルメタデータが一貫していることを確認します。  
この事前チェックでエラーが発生した場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。  
**出力例:**  

```
{
  "id": "engineMixupCheck",
  "title": "Tables recognized by InnoDB that belong to a different engine",
  "status": "OK",
  "description": "Error: Following tables are recognized by InnoDB engine while the SQL layer believes they belong to a different engine. Such situation may happen when one removes InnoDB table files manually from the disk and creates e.g. a MyISAM table with the same name.\n\nA possible way to solve this situation is to e.g. in case of MyISAM table:\n\n1. Rename the MyISAM table to a temporary name (RENAME TABLE).\n2. Create some dummy InnoDB table (its definition does not need to match), then copy (copy, not move) and rename the dummy .frm and .ibd files to the orphan name using OS file commands.\n3. The orphan table can be then dropped (DROP TABLE), as well as the dummy table.\n4. Finally the MyISAM table can be renamed back to its original name.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.general_log_backup",
        "description": "recognized by the InnoDB engine but belongs to CSV"
      }
  ]
}
```

**enumSetElementLengthCheck**  
**事前チェックレベル: Error**  
**255 文字を超える要素を含む `ENUM` および `SET` 列定義**  
テーブルとストアドプロシージャには、255 文字または 1020 バイトを超える `ENUM` または `SET` 列要素が存在してはいけません。MySQL 8.0 より前では、合計最大長は 64K でしたが、8.0 では個々の要素が 255 文字または 1020 バイト (マルチバイトをサポート) に制限されています。`enumSetElementLengthCheck` の事前チェックに失敗した場合は、アップグレードを再試行する前に、これらの新しい制限を超える要素を変更します。  
**出力例:**  

```
{
  "id": "enumSetElementLengthCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "description": "Error: The following columns are defined as either ENUM or SET and contain at least one element longer that 255 characters. They need to be altered so that all elements fit into the 255 characters limit.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.large_set.s",
        "description": "SET contains element longer than 255 characters"
      }
  ]
},
```
`test.large_set` テーブルの `s` 列に 255 文字を超える `SET` 要素が含まれているため、事前チェックはエラーを報告します。  
この列の `SET` サイズを小さくすると、事前チェックに合格し、アップグレードを続行できます。  

```
{
  "id": "enumSetElementLenghtCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "detectedProblems": []
},
```

**foreignKeyLengthCheck**  
**事前チェックレベル: Error**  
**64 文字を超える外部キーの制約名**  
[MySQL ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html)で説明されているように、MySQL では、識別子の長さは 64 文字に制限されています。外部キーの長さがこの値以上になり、アップグレードに失敗する可能性のある[問題](https://bugs.mysql.com/bug.php?id=88118)が特定されたため、この事前チェックが実装されました。この事前チェックでエラーが発生した場合は、アップグレードを再試行する前に 64 文字未満になるように制約を[変更または名前を変更](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html)する必要があります。  
**出力例:**  

```
{
  "id": "foreignKeyLength",
  "title": "Foreign key constraint names longer than 64 characters",
  "status": "OK",
  "detectedProblems": []
}
```

**getDuplicateTriggers**  
**事前チェックレベル: Error**  
**データベース内のすべてのトリガー名は一意である必要があります。**  
データディクショナリの実装が変更されているため、MySQL 8.0 はデータベース内の大文字と小文字を区別するトリガーをサポートしていません。この事前チェックでは、DB クラスターに重複トリガーを含むデータベースが 1 つ以上ないことを検証します。詳細については、MySQL ドキュメントの「[Identifier Case Sensitivity](https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html)」を参照してください。  
**出力例:**  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "description": "Error: You have one or more database containing duplicate triggers. Mysql 8.0 does not support case sensitive triggers within a database https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html. To upgrade to MySQL 8.0, drop the triggers with case-insensitive duplicate names and recreate with distinct names.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_product"
      },
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_PRODUCT"
      }
  ]
}
```
事前チェックでは、データベースクラスターに同じ名前のトリガーが 2 つあるものの、異なるケースである `test.before_insert_product` と `test.before_insert_PRODUCT` を使用しているというエラーが報告されます。  
アップグレードする前に、トリガーの名前を変更するか、新しい名前で削除して再作成します。  
`test.before_insert_PRODUCT` の名前を `test.before_insert_product_2` に変更すると、事前チェックは成功します。  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "detectedProblems": []
}
```

**getEventsWithNullDefiner**  
**事前チェックレベル: Error**  
**`mysql.event` の "definer" 列を null または空白にすることはできません。**  
`DEFINER` 属性は、トリガー、ストアドプロシージャ、イベントなど、ストアドオブジェクト定義を所有する MySQL アカウントを指定します。この属性は、保存されたオブジェクトが実行されるセキュリティコンテキストを制御する場合に特に便利です。ストアドオブジェクトを作成するときに、`DEFINER` が指定されていない場合、デフォルトはオブジェクトを作成したユーザーです。  
MySQL 8.0 にアップグレードする場合、MySQL データディクショナリの "definer" が `null` または空であるオブジェクトを保存することはできません。このようなストアドオブジェクトがある場合、事前チェックエラーが発生します。アップグレードを続行する前に、エラーを修正する必要があります。  
エラーの例  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "description": "Error: Set definer column in mysql.event to a valid non-null definer.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.get_version",
        "description": "Set definer for event get_version in Schema test"
      }
  ]
}
```
事前チェックは、"definer" が `null` であるため、`test.get_version` [イベント](https://dev.mysql.com/doc/refman/5.7/en/events-overview.html)のエラーを返します。  
これを解決するために、イベント定義を確認できます。以下に示すとおり、"definer" は `null` または空白です。  

```
mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+---------+
| db   | name        | definer |
+------+-------------+---------+
| test | get_version |         |
+------+-------------+---------+
1 row in set (0.00 sec)
```
有効な "definer" を指定してイベントを削除または再作成します。  
`DEFINER` を削除または再定義する前に、アプリケーションと権限の要件を慎重に検討して確認してください。詳細については、MySQL ドキュメントの「[Stored Object Access Control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html)」を参照してください。

```
mysql> drop event test.get_version;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> delimiter $$
mysql> CREATE EVENT get_version
    ->     ON SCHEDULE
    ->       EVERY 1 DAY
    ->     DO
    ->      ///DO SOMETHING //
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+------------+
| db   | name        | definer    |
+------+-------------+------------+
| test | get_version | reinvent@% |
+------+-------------+------------+
1 row in set (0.00 sec)
```
これで、事前チェックに合格です。  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "detectedProblems": []},
```

**getMismatchedMetadata**  
**事前チェックレベル: Error**  
**InnoDB データディクショナリと実際のテーブル定義の間の列定義の不一致**  
[schemaInconsistencyCheck](#schemaInconsistencyCheck) と同様、この事前チェックは、アップグレードに進む前に MySQL のテーブルメタデータが一貫していることを確認します。この場合、事前チェックでは、InnoDB データディクショナリと MySQL テーブル定義が列定義と一致することを確認します。不一致が検出された場合、アップグレードは続行されません。  
この事前チェックでエラーが発生した場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。  
**出力例:**  

```
{
  "id": "getMismatchedMetadata",
  "title": "Column definition mismatch between InnoDB Data Dictionary and actual table definition.",
  "status": "OK",
  "description": "Error: Your database has mismatched metadata. The upgrade to mysql 8.0 will not succeed until this is fixed.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.mismatchTable",
        "description": "Table `test/mismatchTable` column names mismatch with InnoDb dictionary column names: iD <> id"
      }
  ]
}
```
事前チェックでは、`test.mismatchTable` テーブル内の `id` 列のメタデータの不一致が報告されます。具体的には、MySQL メタデータの列名は `iD` で、InnoDB の列名は `id` です。

**getTriggersWithNullDefiner**  
**事前チェックレベル: Error**  
**`information_schema.triggers` の "definer" 列は、`null` または空白にすることはできません。**  
事前チェックでは、データベースに、"definer" が `null` または空白で定義されたトリガーがないことを確認します。保存されたオブジェクトの "definer" の要件についての詳細は、「[getEventsWithNullDefiner](#getEventsWithNullDefiner)」を参照してください。  
**出力例:**  

```
{
  "id": "getTriggersWithNullDefiner",
  "title": "The definer column for information_schema.triggers cannot be null or blank.",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.example_trigger",
        "description": "Set definer for trigger example_trigger in Schema test"
      }
  ]
}
```
`test` スキーマの `example_trigger` トリガーの "definer" が `null` であるため、事前チェックはエラーを返します。この問題を修正するには、有効なユーザーでトリガーを再作成するか、トリガーを削除して、"definer" を修正します。詳細については、「[getEventsWithNullDefiner](#getEventsWithNullDefiner)」の例を参照してください。  
`DEFINER` を削除または再定義する前に、アプリケーションと権限の要件を慎重に検討して確認してください。詳細については、MySQL ドキュメントの「[Stored Object Access Control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html)」を参照してください。

**getValueOfVariablelower\$1case\$1table\$1names**  
**事前チェックレベル: Error**  
**`lower_case_table_names` パラメータが `1` に設定されている場合は、すべてのデータベース名とテーブル名を小文字にする必要があります。**  
MySQL 8.0 より前では、データベース名、テーブル名、およびその他のオブジェクトは、ファイルベースのメタデータ (.frm) などのデータディレクトリ内のファイルに対応していました。[lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) システム変数を使用すると、サーバーがデータベースオブジェクトの識別子の大文字と小文字の区別を処理する方法と、そのようなメタデータオブジェクトのストレージを制御できます。このパラメータは、再起動後に既に初期化されているサーバーで変更できます。  
ただし、MySQL 8.0 では、このパラメータは引き続きサーバーが識別子の大文字と小文字の区別を処理する方法を制御しますが、データディクショナリの初期化後に変更することはできません。MySQL 8.0 データベースをアップグレードまたは作成する場合、MySQL でデータディクショナリが初めて起動するときに `lower_case_table_names` に設定した値は、そのデータベースの存続期間に使用されます。この制限は、データベースオブジェクトがファイルベースのメタデータから `mysql` スキーマ内の内部 InnoDB テーブルに移行される[アトミックデータディクショナリ](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)実装の実装の一環として導入されました。  
詳細については、MySQL ドキュメントの「[Data Dictionary Changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-data-dictionary-changes)」を参照してください。  
ファイルベースのメタデータを新しいアトミックデータディクショナリに更新する際のアップグレード時の問題を回避するため、この事前チェックでは、`lower_case_table_names = 1` の場合、すべてのテーブルがディスクに小文字で保存されていることを検証します。小文字で保存されていない場合、事前チェックエラーが返され、アップグレードに進む前にメタデータを修正する必要があります。  
**出力例:**  

```
{
  "id": "getValueOfVariablelower_case_table_names",
  "title": "MySQL pre-checks that all database or table names are lowercase when the lower_case_table_names parameter is set to 1.",
  "status": "OK",
  "description": "Error: You have one or more databases or tables with uppercase letters in the names, but the lower_case_table_names parameter is set to 1. To upgrade to MySQL 8.0, either change all database or table names to lowercase, or set the parameter to 0.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.TEST",
        "description": "Table test.TEST contains one or more capital letters in name while lower_case_table_names = 1"
      }
  ]
}
```
テーブル `test.TEST` に大文字が含まれているものの、`lower_case_table_names` が `1` に設定されているため、エラーが返されます。  
この問題を解決するために、小文字を使用するようにテーブルの名前を変更するか、アップグレードを開始する前に DB クラスターの `lower_case_table_names` パラメータを変更することができます。  
MySQL の[大文字と小文字の区別](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html)に関するドキュメントを確認し、このような変更がアプリケーションにどのように影響するかを慎重にテストして確認します。  
また、MySQL 8.0 で [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names) がどのように処理されるかについては、MySQL 8.0 のドキュメントを参照してください。

**groupByAscSyntaxCheck**  
**事前チェックレベル: Error**  
**削除された `GROUP BY ASC/DESC` 構文の使用**  
MySQL 8.0.13 以降、`GROUP BY` 句の非推奨の `ASC` または `DESC` 構文は削除されました。`GROUP BY` ソートに依存するクエリは、異なる結果を生成するようになりました。特定のソート順序を取得するには、`ORDER BY` 句を代わりに使用します。この構文を使用したオブジェクトがデータベースに存在する場合は、アップグレードを再試行する前に `ORDER BY` 句を使用してオブジェクトを再作成する必要があります。詳細については、MySQL ドキュメントの「[SQL Changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes)」を参照してください。  
**出力例:**  

```
{
  "id": "groupbyAscSyntaxCheck",
  "title": "Usage of removed GROUP BY ASC/DESC syntax",
  "status": "OK",
  "description": "Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.",
  "documentationLink": "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.groupbyasc",
        "description": "PROCEDURE uses removed GROUP BY ASC syntax",
        "dbObjectType": "Routine"
      }
  ]
}
```

**mysqlEmptyDotTableSyntaxCheck**  
**事前チェックレベル: Error**  
**ルーチンで使用される非推奨の `.<table>` 構文を確認します。**  
MySQL 8.0 では、ルーチンに非推奨の識別子構文 (`\".<table>\"`) を含めることができなくなります。保存されたルーチンまたはトリガーにそのような識別子が含まれている場合、アップグレードは失敗します。例えば、次の `.dot_table` リファレンスは許可されなくなりました。  

```
mysql> show create procedure incorrect_procedure\G
*************************** 1. row ***************************
           Procedure: incorrect_procedure
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `incorrect_procedure`()
BEGIN delete FROM .dot_table; select * from .dot_table where 1=1; END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
正しい識別子構文とエスケープを使用するようにルーチンとトリガーを再作成すると、事前チェックに合格し、アップグレードを続行できます。識別子についての詳細は、MySQL ドキュメントの「[Schema Object Names](https://dev.mysql.com/doc/refman/8.0/en/identifiers.html)」を参照してください。  
**出力例:**  

```
{
  "id": "mysqlEmptyDotTableSyntaxCheck",
  "title": "Check for deprecated '.<table>' syntax used in routines.",
  "status": "OK",
  "description": "Error: The following routines contain identifiers in deprecated identifier syntax (\".<table>\"), and should be corrected before upgrade:\n",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.incorrect_procedure",
        "description": " routine body contains deprecated identifiers."
      }
  ]
}
```
非推奨の構文が含まれているため、事前チェックは、`test` データベース内の `incorrect_procedure` ルーチンのエラーを返します。  
ルーチンを修正すると、事前チェックは成功し、アップグレードを再試行できます。

**mysqlIndexTooLargeCheck**  
**事前チェックレベル: Error**  
**MySQL の 5.7 を超えるバージョンで機能するには大きすぎるインデックスがないかをチェックする**  
コンパクトまたは冗長な行形式の場合、プレフィックスが 767 バイトを超えるインデックスを作成することはできません。ただし、MySQL バージョン 5.7.35 より前では、これは可能でした。詳細については、「[MySQL 5.7.35 リリースノート](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-35.html)」を参照してください。  
このバグの影響を受けたインデックスは、MySQL 8.0 にアップグレードするとアクセスできなくなります。この事前チェックでは、アップグレードを進める前に再構築する必要がある問題のあるインデックスを特定します。  

```
 {
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "description": "Error: The following indexes ware made too large for their format in an older version of MySQL (older than 5.7.34). Normally those indexes within tables with compact or redundant row formats shouldn't be larger than 767 bytes. To fix this problem those indexes should be dropped before upgrading or those tables will be inaccessible.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_large_idx",
        "description": "IDX_2"
      }
  ]
}
```
`test.table_with_large_idx` テーブルには 767 バイトを超えるコンパクトな行形式または冗長な行形式を使用したテーブル上のインデックスが含まれているため、事前チェックはエラーを返します。これらのテーブルは、MySQL 8.0 にアップグレードするとアクセスできなくなります。アップグレードに進む前に、次のいずれかを実行します。  
+ 事前チェックで説明されているインデックスを削除します。
+ 事前チェックで説明されているインデックスを追加します。
+ テーブルで使用される行形式を変更します。
ここでは、テーブルを再構築して、事前チェックの失敗を解決します。テーブルを再構築する前に、[innodb\$1file\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format) が `Barracuda` に設定され、[innodb\$1default\$1row\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_default_row_format) が `dynamic` に設定されていることを確認します。これらは MySQL 5.7 のデフォルトです。詳細については、MySQL ドキュメントの「[InnoDB Row Formats](https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html)」および「[InnoDB File-Format Management](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html)」を参照してください。  
テーブルスペースを再構築する前に、MySQL ドキュメントの「[Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。

```
mysql > select @@innodb_file_format,@@innodb_default_row_format;
+----------------------+-----------------------------+
| @@innodb_file_format | @@innodb_default_row_format |
+----------------------+-----------------------------+
| Barracuda            | dynamic                     |
+----------------------+-----------------------------+
1 row in set (0.00 sec)

mysql> optimize table table_with_large_idx;
+---------------------------+----------+----------+-------------------------------------------------------------------+
| Table                     | Op       | Msg_type | Msg_text                                                          |
+---------------------------+----------+----------+-------------------------------------------------------------------+
| test.table_with_large_idx | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.table_with_large_idx | optimize | status   | OK                                                                |
+---------------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.02 sec)

# Verify FILE_FORMAT and ROW_FORMAT
mysql>  select * from information_schema.innodb_sys_tables where name like 'test/table_with_large_idx';
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
| TABLE_ID | NAME                      | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
|       43 | test/table_with_large_idx |   33 |      4 |    26 | Barracuda   | Dynamic    |             0 | Single     |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
1 row in set (0.00 sec)
```
テーブルを再構築すると、事前チェックに合格し、アップグレードを続行できます。  

```
{
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlInvalid57NamesCheck**  
**事前チェックレベル: Error**  
**MySQL 5.7 で使用されている無効なテーブル名とスキーマ名をチェックする**  
MySQL 8.0 で新しいデータディクショナリに移行する場合、データベースインスタンスに `#mysql50#` というプレフィックスが付いたスキーマやテーブルを含めることはできません。このようなオブジェクトが存在する場合、アップグレードは失敗します。この問題を解決するには、返されたスキーマとテーブルに対して [mysqlcheck](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html) を実行します。  
[--fix-db-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-db-names) と [--fix-table-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-table-names) が [MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) から削除されているため、必ず [MySQL 5.7 バージョン](https://downloads.mysql.com/archives/community/)の `mysqlcheck` を使用してください。
**出力例:**  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "description": "The following tables and/or schemas have invalid names. In order to fix them use the mysqlcheck utility as follows:\n\n  $ mysqlcheck --check-upgrade --all-databases\n  $ mysqlcheck --fix-db-names --fix-table-names --all-databases\n\nOR via mysql client, for eg:\n\n  ALTER DATABASE `#mysql50#lost+found` UPGRADE DATA DIRECTORY NAME;",
  "documentationLink": "https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html https://dev.mysql.com/doc/refman/5.7/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "#mysql50#fix_db_names",
        "description": "Schema name"
      }
  ]
}
```
事前チェックでは、スキーマの名前 `#mysql50#fix_db_names` が無効であることが報告されます。  
スキーマ名を修正すると、事前チェックに合格し、アップグレードを続行できます。  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlOrphanedRoutinesCheck**  
**事前チェックレベル: Error**  
**5.7 で孤立したルーチンをチェックする**  
MySQL 8.0 で新しいデータディクショナリに移行する場合、データベースにスキーマが存在しないストアドプロシージャがあると、アップグレードは失敗します。この事前チェックは、DB インスタンスのストアドプロシージャで参照されるすべてのスキーマがまだ存在していることを確認します。アップグレードを続行できるようにするには、これらのストアドプロシージャを削除します。  
**出力例:**  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "description": "Error: The following routines have been orphaned. Schemas that they are referencing no longer exists.\nThey have to be cleaned up or the upgrade will fail.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "dropped_db.get_version",
        "description": "is orphaned"
      }
  ]
},
```
事前チェックでは、`dropped_db` データベース内の `get_version` ストアドプロシージャが孤立していることが報告されます。  
この手順をクリーンアップするには、欠落しているスキーマを再作成します。  

```
mysql> create database dropped_db;
Query OK, 1 row affected (0.01 sec)
```
スキーマが再作成されたら、プロシージャを削除してアップグレードを続行できます。  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlSchemaCheck**  
**事前チェックレベル: Error**  
**MySQL 8.0 の新しいテーブルと競合する `mysql` スキーマのテーブル名**  
MySQL 8.0 で導入された新しい[アトミックデータディクショナリ](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)は、`mysql` スキーマ内の内部 InnoDB テーブルのセットにすべてのメタデータを保存します。アップグレード中、新しい[内部データディクショナリテーブル](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-schema.html)が `mysql` スキーマに作成されます。アップグレードの失敗につながる名前の衝突を避けるため、事前チェックでは `mysql` スキーマ内のすべてのテーブル名を調べ、新しいテーブル名がまだ使用されていないことを確認します。使用されているとエラーが返され、アップグレードを続行することはできません。  
**出力例:**  

```
{
  "id": "mysqlSchema",
  "title": "Table names in the mysql schema conflicting with new tables in the latest MySQL.",
  "status": "OK",
  "description": "Error: The following tables in mysql schema have names that will conflict with the ones introduced in the latest version. They must be renamed or removed before upgrading (use RENAME TABLE command). This may also entail changes to applications that use the affected tables.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrade-before-you-begin.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.tablespaces",
        "description": "Table name used in mysql schema.",
        "dbObjectType": "Table"
      }
  ]
}
```
`mysql` スキーマに `tablespaces` という名前のテーブルがあるため、エラーが返されます。これは、MySQL 8.0 の新しい内部データディクショナリテーブル名の 1 つです。アップグレードする前に、`RENAME TABLE` コマンドを使用して、このようなテーブルの名前を変更または削除する必要があります。

**nonNativePartitioningCheck**  
**事前チェックレベル: Error**  
**非ネイティブパーティショニングのエンジンを使用したパーティションテーブル**  
[MySQL 8.0 ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html)によると、現在、[InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) と [NDB](https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster.html) の 2 つのストレージエンジンがネイティブパーティショニングのサポートを提供しています。このうち、Aurora MySQL バージョン 3 では InnoDB のみがサポートされており、MySQL 8.0 と互換性があります。他のストレージエンジンを使用して MySQL 8.0 でパーティションテーブルを作成しようとすると失敗します。この事前チェックでは、非ネイティブパーティショニングを使用している DB クラスター内のテーブルを検索します。もし何かが返された場合は、パーティショニングを削除するか、ストレージエンジンを InnoDB に変換する必要があります。  
**出力例:**  

```
{
  "id": "nonNativePartitioning",
  "title": "Partitioned tables using engines with non native partitioning",
  "status": "OK",
  "description": "Error: In the latest MySQL storage engine is responsible for providing its own partitioning handler, and the MySQL server no longer provides generic partitioning support. InnoDB and NDB are the only storage engines that provide a native partitioning handler that is supported in the latest MySQL. A partitioned table using any other storage engine must be altered—either to convert it to InnoDB or NDB, or to remove its partitioning—before upgrading the server, else it cannot be used afterwards.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partMyisamTable",
         "description": "MyISAM engine does not support native partitioning",
         "dbObjectType": "Table"
      }
  ]
}
```
ここでは、MyISAM テーブルでパーティショニングが使用されているため、アップグレードを続行する前にアクションが必要です。

**oldTemporalCheck**  
**事前チェックレベル: Error**  
**旧日時型の使用**  
"旧日時" とは、MySQL バージョン 5.5 以下で作成された日時型の列 (`TIMESTAMP` や `DATETIME` など) を指します。MySQL 8.0 では、これらの旧日時データ型のサポートは廃止されます。つまり、データベースにこれらの旧日時型が含まれている場合、MySQL 5.7 から 8.0 へのインプレースアップグレードは不可能です。これを修正するには、アップグレードに進む前に、このような旧日時データ型を含むテーブルを[再構築](https://dev.mysql.com/doc/refman/5.7/en/rebuilding-tables.html)する必要があります。  
MySQL 5.7 での旧日時データ型の廃止の詳細については、この[ブログ](https://dev.mysql.com/blog-archive/how-to-easily-identify-tables-with-temporal-types-in-old-format/)を参照してください。MySQL 8.0 での旧日時データ型の廃止の詳細については、この[ブログ](https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/)を参照してください。  
テーブルスペースを再構築する前に、MySQL ドキュメントの「[Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。
**出力例:**  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "description": "Error: Following table columns use a deprecated and no longer supported temporal disk storage format. They must be converted to the new format before upgrading. It can by done by rebuilding the table using 'ALTER TABLE <table_name> FORCE' command",
  "documentationLink": "https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.55_temporal_table.timestamp_column",
        "description": "timestamp /* 5.5 binary format */",
        "dbObjectType": "Column"
      }
  ]
},
```
テーブル `test.55_temporal_table` の `timestamp_column` 列にエラーが報告されます。これは、サポートされなくなった旧日時ディスクストレージ形式を使用しているためです。  
この問題を解決してアップグレードを続行できるようにするには、テーブルを再構築して、旧日時ディスクストレージ形式を MySQL 5.6 で導入された新しい形式に変換します。変換の詳細および前提条件については、MySQL ドキュメントの「[Converting Between 3-Byte and 4-Byte Unicode Character Sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html)」を参照してください。  
次のコマンドを実行して、この事前チェックで説明されているテーブルを再構築すると、旧日時型が小数秒の精度で新しい形式に変換されます。  

```
ALTER TABLE ... ENGINE=InnoDB;
```
テーブルの再構築についての詳細は、MySQL ドキュメントの「[ALTER TABLE Statement](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html)」を参照してください。  
問題のテーブルを再構築し、アップグレードを再開すると、互換性チェックに合格し、アップグレードを続行できます。  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "detectedProblems": []
}
```

**partitionedTablesInSharedTablespaceCheck**  
**事前チェックレベル: Error**  
**共有テーブルスペースでのパーティションテーブルの使用**  
[MySQL 8.0.13](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html) 以降、共有テーブルスペースにテーブルパーティションを配置するサポートは廃止されます。アップグレードする前に、そのようなテーブルを共有テーブルスペースから file-per-table テーブルスペースに移動します。  
テーブルスペースを再構築する前に、MySQL ドキュメントの「[Partitioning Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。
**出力例:**  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "description": "Error: The following tables have partitions in shared tablespaces. They need to be moved to file-per-table tablespace before upgrading. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partInnoDBTable",
        "description": "Partition p1 is in shared tablespace innodb",
        "dbObjectType": "Table"
      }
  ]
}
```
テーブル `test.partInnoDBTable` のパーティション `p1` がシステムテーブルスペースにあるため、事前チェックに失敗します。  
この問題を解決するには、`test.partInnodbTable` テーブルを再構築し、問題のあるパーティションを file-per-table テーブルスペースの `p1` に配置します。  

```
mysql > ALTER TABLE partInnodbTable REORGANIZE PARTITION p1
    ->   INTO (PARTITION p1 VALUES LESS THAN ('2014-01-01') TABLESPACE=innodb_file_per_table);
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
そうすると、事前チェックに合格します。  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "detectedProblems": []
}
```

**removedFunctionsCheck**  
**事前チェックレベル: Error**  
**最新の MySQL バージョンから削除された関数の使用**  
MySQL 8.0 では、いくつかの組み込み関数が削除されました。この事前チェックでは、これらの関数を使用する可能性のあるオブジェクトについてデータベースを調べます。見つかった場合は、エラーが返されます。アップグレードを再試行する前に、問題を解決する必要があります。  
削除された関数の大部分は[空間関数](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html)であり、同等の `ST_*` 関数に置き換えられました。このような場合は、新しいプロシージャ命名を使用するようにデータベースオブジェクトを変更します。詳細については、MySQL ドキュメントの「[MySQL 8.0 で削除された機能](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals)」を参照してください。  
**出力例:**  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "description": "Error: The following DB objects use functions that were removed in the latest MySQL version. Please make sure to update them to use supported alternatives before upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.GetLocationsInPolygon",
        "description": "PROCEDURE uses removed function POLYGONFROMTEXT (consider using ST_POLYGONFROMTEXT instead)",
        "dbObjectType": "Routine"
      },
      {
        "level": "Error",
        "dbObject": "test.InsertLocation",
        "description": "PROCEDURE uses removed function POINTFROMTEXT (consider using ST_POINTFROMTEXT instead)",
        "dbObjectType": "Routine"
      }
  ]
},
```
事前チェックでは、`test.GetLocationsInPolygon` ストアドプロシージャが [POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_polyfromtext) と [POINTFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_st-mpointfromtext) の 2 つの削除された関数を使用していることが報告されます。また、新しい [ST\$1POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-polyfromtext) と [ST\$1POINTFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-mpointfromtext) を代替として使用することが提案されます。提案を使用してプロシージャを再作成すると、事前チェックは正常に完了します。  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "detectedProblems": []
},
```
ほとんどの場合、非推奨の関数には直接置き換えがありますが、アプリケーションをテストし、変更の結果として動作に変化がないかドキュメントを確認してください。

**routineSyntaxCheck**  
**事前チェックレベル: Error**  
**ルーチンのようなオブジェクトの MySQL 構文チェック**  
MySQL 8.0 では、以前に予約されていなかった[予約キーワード](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0)があります。アップグレード事前チェッカーは、データベースオブジェクトの名前およびその定義と本文で、予約キーワードの使用を評価します。ストアドプロシージャ、関数、イベント、トリガーなどのデータベースオブジェクトで予約キーワードが使用されていることが検出されると、アップグレードは失敗し、エラーが `upgrade-prechecks.log` ファイルに発行されます。この問題を解決するには、アップグレード前にこれらのオブジェクト定義を更新し、そのような参照を一重引用符 (') で囲む必要があります。MySQL の予約語のエスケープについての詳細は、MySQL ドキュメントの「[String Literals](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html)」を参照してください。  
または、名前を別の名前に変更することもできます。そのため、アプリケーションの変更が必要になる場合があります。  
**出力例:**  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "description": "The following objects did not pass a syntax check with the latest MySQL grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
         "level": "Error",
         "dbObject": "test.select_res_word",
         "description": "at line 2,18: unexpected token 'except'",
         "dbObjectType": "Routine"
      }
  ]
}
```
この問題を修正するには、ルーチン定義を確認します。  

```
SHOW CREATE PROCEDURE test.select_res_word\G

*************************** 1. row ***************************
           Procedure: select_res_word
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE PROCEDURE 'select_res_word'()
BEGIN
    SELECT * FROM except;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
プロシージャは、MySQL 8.0 の新しいキーワードである `except` という名前のテーブルを使用します。文字列リテラルをエスケープして、プロシージャを再作成します。  

```
> drop procedure if exists select_res_word;
Query OK, 0 rows affected (0.00 sec)

> DELIMITER $$
 > CREATE PROCEDURE select_res_word()
    -> BEGIN
    ->     SELECT * FROM 'except';
    -> END$$
Query OK, 0 rows affected (0.00 sec)

 > DELIMITER ;
```
これで、事前チェックに合格です。  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "detectedProblems": []
}
```

**schemaInconsistencyCheck**  
**事前チェックレベル: Error**  
**ファイルの削除または破損によるスキーマの不一致**  
前述したように、MySQL 8.0 は、`mysql` スキーマ内の内部 InnoDB テーブルのセットにすべてのメタデータを保存する[アトミックデータディクショナリ](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)を導入しました。この新しいアーキテクチャは、古いファイルベースのアプローチから "アトミック DDL" 問題を解決し、データベースメタデータを管理するトランザクションの [ACID](https://en.wikipedia.org/wiki/ACID) 準拠の方法を提供します。MySQL 8.0 より前では、DDL オペレーションが予期せず中断した場合、スキーマオブジェクトが孤立する可能性がありました。アップグレード中にファイルベースのメタデータを新しいアトミックデータディクショナリテーブルに移行すると、DB インスタンスにこのような孤立したスキーマオブジェクトがないことが保証されます。孤立したオブジェクトが発生した場合、アップグレードは失敗します。  
アップグレードを開始する前にこれらの孤立したオブジェクトを検出しやすくするため、`schemaInconsistencyCheck` 事前チェックが実行されて、すべてのデータディクショナリメタデータオブジェクトが同期されていることを確認します。孤立したメタデータオブジェクトが検出されると、アップグレードは続行されません。アップグレードを続行するには、これらの孤立したメタデータオブジェクトをクリーンアップします。  
この事前チェックでエラーが発生した場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。  
**出力例:**  

```
{
  "id": "schemaInconsistencyCheck",
  "title": "Schema inconsistencies resulting from file removal or corruption",
  "status": "OK",
  "description": "Error: Following tables show signs that either table datadir directory or frm file was removed/corrupted. Please check server logs, examine datadir to detect the issue and fix it before upgrade",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.schemaInconsistencyCheck_failure",
        "description": "present in INFORMATION_SCHEMA's INNODB_SYS_TABLES table but missing from TABLES table"
      }
  ]
}
```
事前チェックでは、`test.schemaInconsistencyCheck_failure` テーブルに一貫性のないメタデータがあることが報告されます。この場合、テーブルは InnoDB ストレージエンジンメタデータ (`information_schema.INNODB_SYS_TABLES`) に存在しますが、MySQL メタデータ (`information_schema.TABLES`) には存在しません。

### エラーを報告する Aurora MySQL の事前チェック
<a name="precheck-descriptions-errors.aurora"></a>

次の事前チェックは、Aurora MySQL に固有のものです。
+ [auroraCheckDDLRecovery](#auroraCheckDDLRecovery)
+ [auroraCheckRdsUpgradePrechecksTable](#auroraCheckRdsUpgradePrechecksTable)
+ [auroraFODUpgradeCheck](#auroraFODUpgradeCheck)
+ [auroraGetDanglingFulltextIndex](#auroraGetDanglingFulltextIndex)
+ [auroraUpgradeCheckForDatafilePathInconsistency](#auroraUpgradeCheckForDatafilePathInconsistency)
+ [auroraUpgradeCheckForFtsSpaceIdZero](#auroraUpgradeCheckForFtsSpaceIdZero)
+ [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions)
+ [auroraUpgradeCheckForInstanceLimit](#auroraUpgradeCheckForInstanceLimit)
+ [auroraUpgradeCheckForInternalUsers](#auroraUpgradeCheckForInternalUsers)
+ [auroraUpgradeCheckForMasterUser](#auroraUpgradeCheckForMasterUser)
+ [auroraUpgradeCheckForPrefixIndexOnGeometryColumns](#auroraUpgradeCheckForPrefixIndexOnGeometryColumns)
+ [auroraUpgradeCheckForSpecialCharactersInProcedures](#auroraUpgradeCheckForSpecialCharactersInProcedures)
+ [auroraUpgradeCheckForSysSchemaObjectTypeMismatch](#auroraUpgradeCheckForSysSchemaObjectTypeMismatch)
+ [auroraUpgradeCheckForViewColumnNameLength](#auroraUpgradeCheckForViewColumnNameLength)
+ [auroraUpgradeCheckIndexLengthLimitOnTinyColumns](#auroraUpgradeCheckIndexLengthLimitOnTinyColumns)
+ [auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable](#auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable)
+ [auroraUpgradeCheckForInvalidUtf8mb3ColumnComments](#auroraUpgradeCheckForInvalidUtf8mb3ColumnComments)

**auroraCheckDDLRecovery**  
**事前チェックレベル: Error**  
**Aurora DDL リカバリ機能に関連するアーティファクトをチェックする**  
Aurora MySQL でのデータ定義言語 (DDL) リカバリ実装の一環として、実行中の DDL ステートメントのメタデータは `mysql` スキーマの `ddl_log_md_table` および `ddl_log_table` テーブルに保持されます。Aurora の DDL リカバリの実装は、MySQL 8.0 の新しい[アトミックデータディクショナリ](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)実装の一部であるため、バージョン 3 以降ではサポートされていません。互換性チェック中に DDL ステートメントが実行されている場合、この事前チェックが失敗する可能性があります。DDL ステートメントが実行されていない間は、アップグレードを試すことをお勧めします。  
この事前チェックが実行中の DDL ステートメントなしで失敗する場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。  
DDL ステートメントが実行されている場合、事前チェック出力は次のメッセージを出力します。  

```
“There are DDL statements in process. Please allow DDL statements to finish before upgrading.”
```
**出力例:**  

```
{
  "id": "auroraCheckDDLRecovery",
  "title": "Check for artifacts related to Aurora DDL recovery feature",
  "status": "OK",
  "description": "Aurora implementation of DDL recovery is not supported from 3.x onwards. This check verifies that the database do not have artifacts realted to the feature",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_md_table",
        "description": "Table mysql.ddl_log_md_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_table",
        "description": "Table mysql.ddl_log_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "information_schema.processlist",
        "description": "There are DDL statements in process. Please allow DDL statements to finish before upgrading."
      }
  ]
}
```
事前チェックは、互換性チェックと同時に実行中の DDL が原因でエラーを返しました。DDL を実行せずにアップグレードを再試行することをお勧めします。

**auroraCheckRdsUpgradePrechecksTable**  
**事前チェックレベル: Error**  
**`mysql.rds_upgrade_prechecks` テーブルの存在を確認する**  
これは、RDS サービスによって実行される内部のみの事前チェックです。エラーはアップグレード時に自動的に処理されます。これらのエラーは無視して問題ありません。  
この事前チェックでエラーが発生した場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。  

```
{
  "id": "auroraCheckRdsUpgradePrechecksTable",
  "title": "Check existence of mysql.rds_upgrade_prechecks table",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraFODUpgradeCheck**  
**事前チェックレベル: Error**  
**Aurora 高速 DDL 機能に関連するアーティファクトをチェックする**  
[高速 DDL](AuroraMySQL.Managing.FastDDL.md) 最適化は、一部の DDL オペレーションの効率を向上させるために、Aurora MySQL バージョン 2 の[ラボモード](AuroraMySQL.Updates.LabMode.md)で導入されました。Aurora MySQL バージョン 3 では、ラボモードが削除され、高速 DDL 実装は、[Instant DDL](https://dev.mysql.com/doc/refman/8.4/en/innodb-online-ddl-operations.html) と呼ばれる MySQL 8.0 機能に置き換えられました。  
Aurora MySQL バージョン 3 にアップグレードする前に、ラボモードで高速 DDL を使用するテーブルは、Aurora MySQL バージョン 3 との互換性を確保するために `OPTIMIZE TABLE` または `ALTER TABLE ... ENGINE=InnoDB` コマンドを実行して再構築する必要があります。  
この事前チェックは、このようなテーブルのリストを返します。返されたテーブルが再構築されたら、アップグレードを再試行できます。  
**出力例:**  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "description": "Aurora fast DDL is not supported from 3.x onwards. This check verifies that the database does not have artifacts related to the feature",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test",
        "description": "Your table has pending Aurora fast DDL operations. Run 'OPTIMIZE TABLE <table name>' for the table to apply all the pending DDL updates. Then try the upgrade again."
      }
  ]
}
```
事前チェックでは、テーブル `test.test` に保留中の高速 DDL オペレーションがあることが報告されます。  
アップグレードを続行できるようにするには、テーブルを再構築し、アップグレードを再試行します。  
テーブルスペースを再構築する前に、MySQL ドキュメントの「[Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。

```
mysql> optimize table test.test;
+-----------+----------+----------+-------------------------------------------------------------------+
| Table     | Op       | Msg_type | Msg_text                                                          |
+-----------+----------+----------+-------------------------------------------------------------------+
| test.test | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.test | optimize | status   | OK                                                                |
+-----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.04 sec)
```
テーブルを再構築すると、事前チェックに成功します。  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraGetDanglingFulltextIndex**  
**事前チェックレベル: Error**  
**ダングリング `FULLTEXT` インデックス参照を含むテーブル**  
MySQL 5.6.26 より前では、全文検索インデックスを削除すると、非表示の `FTS_DOC_ID` 列と `FTS_DOC_ID_INDEX` 列が孤立する可能性があります。詳細については、「[バグ \$176012](https://bugs.mysql.com/bug.php?id=76012)」を参照してください。  
これが発生した MySQL の以前のバージョンでテーブルが作成されている場合、Aurora MySQL バージョン 3 へのアップグレードが失敗する可能性があります。この事前チェックでは、MySQL 8.0 にアップグレードする前に、このような孤立した、または "ダングリング" FULLTEXT インデックスが DB クラスターに存在しないことを確認します。この事前チェックが失敗した場合は、そのようなダングリング FULLTEXT インデックスを含むテーブルを再構築します。  
**出力例:**  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "description": "Error: The following tables contain dangling FULLTEXT index which is not supported. It is recommended to rebuild the table before upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_fts_index",
        "description": "Table `test.table_with_fts_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
      }
  ]
},
```
`test.table_with_fts_index` テーブルにダングリング FULLTEXT インデックスが含まれているため、エラーが事前チェックによってレポートされます。アップグレードを続行できるようにするには、FULLTEXT インデックスの補助テーブルをクリーンアップするようにテーブルを再構築します。`OPTIMIZE TABLE test.table_with_fts_index` または `ALTER TABLE test.table_with_fts_index, ENGINE=INNODB` を使用します。  
テーブルを再構築すると、事前チェックに合格します。  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForDatafilePathInconsistency**  
**事前チェックレベル: Error**  
**`ibd` ファイルパスに関連する不整合をチェックする**  
この事前チェックは、Aurora MySQL バージョン 3.03.0 以前にのみ適用されます。この事前チェックでエラーが発生した場合は、Aurora MySQL バージョン 3.04 以降にアップグレードします。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForFtsSpaceIdZero**  
**事前チェックレベル: Error**  
**スペース ID がゼロの FULLTEXT インデックスをチェックする**  
MySQL では、InnoDB テーブルに [FULLTEXT インデックス](https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html)を追加すると、多数の補助インデックステーブルスペースが作成されます。バージョン 5.6.20 で修正された以前のバージョンの MySQL の[バグ](https://bugs.mysql.com/bug.php?id=72132)により、これらの補助インデックステーブルが、独自の InnoDB テーブルスペースではなく、[システムテーブルスペース](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_system_tablespace)に作成された可能性があります。  
このような補助テーブルスペースが存在する場合、アップグレードは失敗します。事前チェックエラーに記載されている FULLTEXT インデックスを再作成し、アップグレードを再試行します。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForFtsSpaceIdZero",
  "title": "Check for fulltext index with space id as zero",
  "status": "OK",
  "description": "The auxiliary tables of FTS indexes on the table are created in system table-space. Due to this DDL queries executed on MySQL8.0 shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.fts_space_zero_check",
        "description": " The auxiliary tables of FTS indexes on the table 'test.fts_space_zero_check' are created in system table-space due to https://bugs.mysql.com/bug.php?id=72132. In MySQL8.0, DDL queries executed on this table shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade."
      }
  ]
},
```
システムテーブルスペースに補助全文検索 (FTS) テーブルがあるため、この事前チェックは `test.fts_space_zero_check` テーブルのエラーを報告します。  
このテーブルに関連付けられた FTS インデックスを削除して再作成すると、事前チェックは成功します。  
テーブルスペースを再構築する前に、MySQL ドキュメントの「[Partitioning Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning)」を参照して、フォアグラウンドトランザクションに対するロックとデータ移動の影響を理解してください。

```
{
 "id": "auroraUpgradeCheckForFtsSpaceIdZero",
 "title": "Check for fulltext index with space id as zero",
 "status": "OK",
 "detectedProblems": []
}
```

**auroraUpgradeCheckForIncompleteXATransactions**  
**事前チェックレベル: Error**  
**準備済み状態の XA トランザクションをチェックする**  
メジャーバージョンアップグレードプロセスの実行中に、Aurora MySQL バージョン 2 DB インスタンスを[クリーンシャットダウン](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown)する必要があります。これにより、すべてのトランザクションがコミットまたはロールバックされ、InnoDB がすべての undo ログレコードを消去します。トランザクションのロールバックが必要なため、データベースに準備済み状態の [XA トランザクション](https://dev.mysql.com/doc/refman/5.7/en/xa.html)がある場合、クリーンシャットダウンの進行をブロックできます。このため、準備済みの XA トランザクションが検出されると、コミットまたはロールバックするアクションを実行するまでアップグレードを続行できなくなります。  
`XA RECOVER` を使用して準備された状態で XA トランザクションを検索する方法の詳細については、MySQL ドキュメントの「[XA Transaction SQL Statements](https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html)」を参照してください。XA トランザクションの状態の詳細については、MySQL ドキュメントの「[XA Transaction States](https://dev.mysql.com/doc/refman/5.7/en/xa-states.html)」を参照してください。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions."
      }
  ]
}
```
この事前チェックでは、コミットまたはロールバックする必要がある準備済み状態のトランザクションがあるため、エラーが報告されます。  
データベースにログインしたら、[information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html) テーブルと `XA RECOVER` 出力で詳細を確認できます。  
トランザクションをコミットまたはロールバックする前に、[MySQL ドキュメント](https://dev.mysql.com/doc/refman/5.7/en/xa-restrictions.html)とアプリケーション要件を確認することをお勧めします。

```
mysql> select trx_started,
    trx_mysql_thread_id,
    trx_id,trx_state,
    trx_operation_state,
    trx_rows_modified,
    trx_rows_locked 
from 
    information_schema.innodb_trx;
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| trx_started         | trx_mysql_thread_id | trx_id  | trx_state | trx_operation_state | trx_rows_modified | trx_rows_locked |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| 2024-08-12 01:09:39 |                   0 | 2849470 | RUNNING   | NULL                |                 1 |               0 |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
1 row in set (0.00 sec)

mysql> xa recover;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        1 |            6 |            0 | xatest |
+----------+--------------+--------------+--------+
1 row in set (0.00 sec)
```
この場合、準備済みのトランザクションをロールバックします。  

```
mysql> XA ROLLBACK 'xatest';
Query OK, 0 rows affected (0.00 sec)
v
mysql> xa recover;
Empty set (0.00 sec)
```
XA トランザクションがロールバックされると、事前チェックは成功します。  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInstanceLimit**  
**事前チェックレベル: Error**  
**現在のインスタンスクラスでアップグレードがサポートされているかどうかを確認する**  
ライター [DB インスタンスクラス](Concepts.DBInstanceClass.md)が db.r6i.32xlarge である Aurora MySQL バージョン 2.12.0 または 2.12.1 からのインプレースアップグレードの実行は現在サポートされていません。この場合、事前チェックはエラーを返します。アップグレードを続行できるようにするには、DB インスタンスクラスを db.r6i.24xlarge 以下に変更します。または、Aurora MySQL バージョン 2.12.2 以降にアップグレードできます。Aurora MySQL バージョン 3 へのインプレースアップグレードは db.r6i.32xlarge でサポートされています。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForInstanceLimit",
  "title": "Checks if upgrade is supported on the current instance class",
  "status": "OK",
  "description": "Upgrade from Aurora Version 2.12.0 and 2.12.1 may fail for 32.xl and above instance class.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Upgrade is not supported on this instance size for Aurora MySql Version 2.12.1. Before upgrading to Aurora MySql 3, please consider either: 1. Changing the instance class to 24.xl or lower. -or- 2. Upgrading to patch version 2.12.2 or higher."
      }
  ]
},
```
ライター DB インスタンスが db.r6i.32xlarge インスタンスクラスを使用し、Aurora MySQL バージョン 2.12.1 で実行されているため、事前チェックはエラーを返します。

**auroraUpgradeCheckForInternalUsers**  
**事前チェックレベル: Error**  
**8.0 の内部ユーザーをチェックする**  
この事前チェックは、Aurora MySQL バージョン 3.03.0 以前にのみ適用されます。この事前チェックでエラーが発生した場合は、Aurora MySQL バージョン 3.04 以降にアップグレードします。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForInternalUsers",
  "title": "Check for 8.0 internal users.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForMasterUser**  
**事前チェックレベル: Error**  
**RDS マスターユーザーが存在するかどうかを確認する**  
MySQL 8 は、権限管理をより簡単かつきめ細かなものにするために、[ロール](https://dev.mysql.com/doc/refman/8.0/en/roles.html)と[動的権限](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#static-dynamic-privileges)をサポートする新しい権限モデルを追加しました。この変更の一環として、Aurora MySQL は新しい `rds_superuser_role` を導入しました。これは、Aurora MySQL バージョン 2 からバージョン 3 へのアップグレード時にデータベースのマスターユーザーに自動的に付与されます。  
Aurora MySQL のマスターユーザーに割り当てられたロールと権限の詳細については、「[マスターユーザーアカウント権限](UsingWithRDS.MasterAccounts.md)」を参照してください。Aurora MySQL バージョン 3 のロールベースの特権モデルの詳細については、「[ロールベースの特権モデル](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)」を参照してください。  
この事前チェックは、マスターユーザーがデータベースに存在することを確認します。マスターユーザーが存在しない場合、事前チェックに失敗します。アップグレードを続行できるようにするには、マスターユーザーのパスワードをリセットするか、ユーザーを手動で作成して、マスターユーザーを再作成します。次に、アップグレードを再試行します。マスターユーザーのパスワードのリセットについての詳細は、「[データベースマスターユーザーのパスワードの変更](Aurora.Modifying.md#Aurora.Modifying.Password)」を参照してください。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  "title": "Check if master user exists",
  "status": "OK",
  "description": "Throws error if master user has been dropped!",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.MasterAccounts.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your Master User on host '%' has been dropped. To proceed with the upgrade, recreate the master user `reinvent` on default host '%'"
      }
  ]
}
```
マスターユーザーのパスワードをリセットすると、事前チェックに合格し、アップグレードを再試行できます。  
次の例では、AWS CLI を使用してパスワードをリセットします。パスワードの変更は即時適用されます。  

```
aws rds modify-db-cluster \
    --db-cluster-identifier my-db-cluster \
    --master-user-password my-new-password
```
その後、事前チェックは成功します。  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  title": "Check if master user exists",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForPrefixIndexOnGeometryColumns**  
**事前チェックレベル: Error**  
**プレフィックスインデックスのジオメトリ列をチェックする**  
[MySQL 8.0.12](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html#mysqld-8-0-12-spatial-support) 以降、[GEOMETRY](https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html) データ型を使用して列に[プレフィックス付き](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix)インデックスを作成することはできなくなります。詳細については、[WL\$111808](https://dev.mysql.com/worklog/task/?id=11808) を参照してください。  
このようなインデックスが存在する場合、アップグレードは失敗します。問題を解決するには、事前チェックの失敗で言及されたテーブルのプレフィックス付き `GEOMETRY` インデックスを削除します。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "description": "Consider dropping the prefix Indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.geom_index_prefix",
        "description": "Table `test`.`geom_index_prefix` has an index `LatLon` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `LatLon` ON `test`.`geom_index_prefix`;"
      }
  ]
}
```
`test.geom_index_prefix` テーブルの `GEOMETRY` 列にプレフィックスが付いたインデックスが含まれているため、事前チェックはエラーを報告します。  
このインデックスを削除すると、事前チェックは成功します。  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForSpecialCharactersInProcedures**  
**事前チェックレベル: Error**  
**ストアドプロシージャの特殊文字に関連する不整合をチェックする**  
MySQL 8.0 より前では、データベース名、テーブル名、およびその他のオブジェクトは、データディレクトリ内のファイル、つまりファイルベースのメタデータに対応していました。MySQL 8.0 へのアップグレードの一環として、すべてのデータベースオブジェクトは、`mysql` スキーマに保存されている新しい内部データディクショナリテーブルに移行され、新しく実装された[アトミックデータディクショナリ](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)をサポートします。ストアドプロシージャの移行の一環として、各プロシージャのプロシージャ定義と本文は、新しいデータディクショナリに取り込まれるときに検証されます。  
MySQL 8 より前では、場合によっては、保存されたルーチンを作成したり、特殊文字を含むプロシージャを `mysql.proc` テーブルに直接挿入したりできました。例えば、非準拠の[改行なしスペース文字](https://en.wikipedia.org/wiki/Non-breaking_space) `\xa0` を含むコメントが含まれたストアドプロシージャを作成できます。このようなプロシージャが検出されると、アップグレードは失敗します。  
この事前チェックは、ストアドプロシージャの本文と定義にそのような文字が含まれていないことを検証します。アップグレードを続行できるようにするには、これらのストアドプロシージャを非表示文字または特殊文字なしで再作成します。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "description": "Following procedure(s) has special characters inconsistency.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "information_schema.routines",
        "description": "Data Dictionary Metadata is inconsistent for the procedure `get_version_proc` in the database `test` due to usage of special characters in procedure body. To avoid that, drop and recreate the procedure without any special characters before proceeding with the Upgrade."
      }
  ]
}
```
事前チェックでは、DB クラスターに、プロシージャ本文に特殊文字を含む `test` データベース内の `get_version_proc` というプロシージャが含まれていることが報告されます。  
ストアドプロシージャを削除して再作成すると、事前チェックが成功し、アップグレードを続行できます。  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForSysSchemaObjectTypeMismatch**  
**事前チェックレベル: Error**  
**`sys` スキーマのオブジェクトタイプの不一致を確認する**  
[sys スキーマ](https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html)は、ユーザーが DB インスタンスのトラブルシューティング、最適化、モニタリングを行うのに役立つ MySQL データベース内のオブジェクトとビューのセットです。Aurora MySQL バージョン 2 からバージョン 3 へのメジャーバージョンアップグレードを実行すると、`sys` スキーマビューが再作成され、新しい Aurora MySQL バージョン 3 定義に更新されます。  
アップグレードの一環として、`sys` スキーマ内のオブジェクトがビューではなくストレージエンジン ([INFORMATION\$1SCHEMA.TABLES](https://dev.mysql.com/doc/refman/5.7/en/information-schema-tables-table.html) の `sys_config/BASE TABLE`) を使用して定義されている場合、アップグレードは失敗します。このようなテーブルは、`information_schema.tables` テーブルにあります。これは予想される動作ではありませんが、ユーザーエラーが原因で発生する場合があります。  
この事前チェックでは、すべての `sys` スキーマオブジェクトを検証して、ユーザーが正しいテーブル定義を使用し、ビューが誤って InnoDB または MyISAM テーブルとして定義されていないことを確認します。問題を解決するには、返されたオブジェクトの名前を変更または削除して手動で修正します。次に、アップグレードを再試行します。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "description": "Database contains objects with type mismatch for sys schema.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "sys.waits_global_by_latency",
        "description": "Your object sys.waits_global_by_latency has a type mismatch. To fix the inconsistency we recommend to rename or remove the object before upgrading (use RENAME TABLE command). "
      }
  ]
}
```
事前チェックでは、`sys` スキーマの [sys.waits\$1global\$1by\$1latency](https://dev.mysql.com/doc/refman/5.7/en/sys-waits-global-by-latency.html) ビューに、アップグレードの進行を妨げているタイプの不一致があることが報告されます。  
DB インスタンスにログインすると、このオブジェクトがビューになるタイミングで InnoDB テーブルとして定義されていることがわかります。  

```
mysql> show create table sys.waits_global_by_latency\G
*************************** 1. row ***************************
       Table: waits_global_by_latency
Create Table: CREATE TABLE `waits_global_by_latency` (
  `events` varchar(128) DEFAULT NULL,
  `total` bigint(20) unsigned DEFAULT NULL,
  `total_latency` text,
  `avg_latency` text,
  `max_latency` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
この問題を解決するには、[正しい定義](https://github.com/mysql/mysql-server/blob/mysql-5.7.44/scripts/sys_schema/views/p_s/waits_global_by_latency.sql)でビューを削除して再作成するか、名前を変更します。アップグレードプロセス中に、ビューは正しいテーブル定義で自動的に作成されます。  

```
mysql> RENAME TABLE sys.waits_global_by_latency to sys.waits_global_by_latency_old;
Query OK, 0 rows affected (0.01 sec)
```
これを行うと、事前チェックに合格します。  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForViewColumnNameLength**  
**事前チェックレベル: Error**  
**ビュー内の列名の上限を確認する**  
MySQL の[列名の最大許容長](https://dev.mysql.com/doc/refman/5.7/en/identifier-length.html)は 64 文字です。MySQL 8.0 より前では、場合によっては 64 文字を超える列名でビューを作成できました。このようなビューがデータベースインスタンスに存在する場合、事前チェックエラーが返され、アップグレードは失敗します。アップグレードを続行できるようにするには、問題のビューを再作成し、列の長さが 64 文字未満であることを確認する必要があります。次に、アップグレードを再試行します。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "description": "Following view(s) has column(s) with length greater than 64.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.colname_view_test.col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad",
        "description": "View `test`.`colname_view_test`has column `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` with invalid column name length. To avoid Upgrade errors, view should be altered by renaming the column name so that its length is not 0 and doesn't exceed 64."
      }
  ]
}
```
事前チェックでは、`test.colname_view_test` ビューに最大許容列長である 64 文字を超える列 `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` が含まれていることが報告されます。  
ビュー定義を見ると、問題のある列が表示されます。  

```
mysql> desc `test`.`colname_view_test`;
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| Field                                                            | Type        | Null | Key | Default | Extra |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| col1                                                             | varchar(20) | YES  |     | NULL    |       |
| col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad | int(11)     | YES  |     | NULL    |       |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
アップグレードを続行できるようにするには、列の長さが 64 文字を超えないようにして、ビューを再作成します。  

```
mysql> drop view `test`.`colname_view_test`;
Query OK, 0 rows affected (0.01 sec)

mysql> create view `test`.`colname_view_test`(col1, col2_nopad) as select inf, fodcol from test;
Query OK, 0 rows affected (0.01 sec)

mysql> desc `test`.`colname_view_test`;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| col1       | varchar(20) | YES  |     | NULL    |       |
| col2_nopad | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
これを行うと、事前チェックは成功します。  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckIndexLengthLimitOnTinyColumns**  
**事前チェックレベル: Error**  
**小さな列でプレフィックスの長さが 255 バイトを超えるインデックスが定義されているテーブルをチェックする**  
MySQL で[バイナリデータ型](https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html)を使用して列にインデックスを作成する場合は、インデックス定義に[プレフィックス](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix)の長さを追加する必要があります。MySQL 8.0 より前では、場合によっては、このようなデータ型の最大許容サイズを超えるプレフィックス長を指定できました。例として `TINYTEXT` 列と `TINYBLOB` 列があります。最大許容データサイズは 255 バイトですが、これより大きいインデックスプレフィックスが許可されていました。詳細については、MySQL ドキュメントの「[InnoDB Limits](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html)」を参照してください。  
この事前チェックが失敗した場合は、問題のあるインデックスを削除するか、`TINYTEXT` 列と `TINYBLOB` 列のインデックスのプレフィックス長を 255 バイト未満に減らします。次に、アップグレードを再試行します。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "description": "Prefix length of the indexes defined on tiny columns cannot exceed 255 bytes. With utf8mb4 char set, this limits the prefix length supported upto 63 characters only. A larger prefix length was allowed in MySQL5.7 using innodb_large_prefix parameter. This parameter is deprecated in MySQL 8.0.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html, https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.tintxt_prefixed_index.col1",
        "description": "Index 'PRIMARY' on tinytext/tinyblob column `col1` of table `test.tintxt_prefixed_index` is defined with prefix length exceeding 255 bytes. Reduce the prefix length to <=255 bytes depending on character set used. For utf8mb4, it should be <=63."
      }
  ]
}
```
TINYTEXT 列または TINYBLOB 列に 255 バイトを超えるプレフィックス `PRIMARY` を持つインデックスがあるため、このプレチェックは `test.tintxt_prefixed_index` テーブルのエラーを報告します。  
このテーブルの定義を見ると、プライマリキーの `TINYTEXT` 列 `col1` のプレフィックスが 65 であることがわかります。テーブルは、1 文字あたり 4 バイトを格納する `utf8mb4` 文字セットを使用して定義されるため、プレフィックスは 255 バイトの制限を超えています。  

```
mysql> show create table `test`.`tintxt_prefixed_index`\G
*************************** 1. row ***************************
       Table: tintxt_prefixed_index
Create Table: CREATE TABLE `tintxt_prefixed_index` (
  `col1` tinytext NOT NULL,
  `col2` tinytext,
  `col_id` tinytext,
  PRIMARY KEY (`col1`(65))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
1 row in set (0.00 sec)
```
`utf8mb4` 文字セットの使用中にインデックスプレフィックスを 63 に変更すると、アップグレードを続行できます。  

```
mysql> alter table `test`.`tintxt_prefixed_index` drop PRIMARY KEY, ADD  PRIMARY KEY (`col1`(63));
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
これを行うと、事前チェックは成功します。  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable**  
**事前チェックレベル: Error**  
**`mysql.host` テーブルに欠落している InnoDB メタデータの不整合を確認する**  
これは、RDS サービスによって実行される内部のみの事前チェックです。エラーはアップグレード時に自動的に処理されます。これらのエラーは無視して問題ありません。  
この事前チェックでエラーが発生した場合は、[AWS サポート](https://aws.amazon.com/support)でケースを開き、メタデータの不整合の解決をリクエストします。または、論理ダンプを実行してから新しい Aurora MySQL バージョン 3 DB クラスターに復元することで、アップグレードを再試行することもできます。

**auroraUpgradeCheckForInvalidUtf8mb3ColumnComments**  
**事前チェックレベル: Error**  
**無効な utf8mb3 列コメントをチェックする**  
この事前チェックでは、無効な utf8mb3 文字エンコーディングの列コメントを含むテーブルを特定します。MySQL 8.0 では、列コメントを含むメタデータの文字エンコーディングに、より厳格な検証が適用されます。列コメントに含まれている文字が utf8mb3 文字セットの有効な文字でない場合、アップグレードは失敗します。  
この問題の最も一般的な原因は、列コメントに BMP (基本多言語面) 以外の文字が存在することです。BMP 以外の文字には 4 バイトの UTF-8 エンコード (utf8mb4) が必要ですが、utf8mb3 は 3 バイトのシーケンスのみをサポートしており、これらの文字を表すことはできません。  
この問題を解決するには、アップグレードを試みる前に、列コメントを変更して BMP 以外の文字を削除または置換する必要があります。列コメントを更新するには、`ALTER TABLE` ステートメントを使用できます。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "description": "Following table(s) has/have invalid utf8mb3 comments on the column/columns.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.t2",
        "description": "Table test.t2 has invalid utf8mb3 comments in it's column/columns. This is due to non-BMP characters in the comment field. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
      }
  ]
}
```
事前チェックでは、1 つ以上の列コメントに無効な utf8mb3 文字 (特に BMP 以外の文字) が `test.t2` テーブルに含まれていることがレポートされます。  
この問題を解決するには、問題のある列を特定し、コメントを更新できます。まず、テーブル構造を調べて、コメントのある列を特定します。  

```
mysql> SHOW CREATE TABLE test.t2\G
```
問題のあるコメントを含む列を特定したら、`ALTER TABLE` ステートメントを使用して更新します。例:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT 'Updated comment without non-BMP characters';
```
または、コメントを完全に削除することもできます。  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT '';
```
問題のある列コメントをすべて更新すると、事前チェックに合格し、アップグレードを続行できます。  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "detectedProblems": []
}
```
列コメントを変更する前に、これらのコメントに依存するアプリケーションコードやドキュメントが適切に更新されていることを確認してください。アプリケーションで BMP 以外の文字が必要な場合は、Unicode サポートを強化するために utf8mb4 文字セットへの移行を検討してください。

## 警告
<a name="precheck-descriptions-warnings"></a>

次の事前チェックは、事前チェックが失敗してもアップグレードを続行できるときに警告を生成します。

**Topics**
+ [

### 警告を報告する MySQL の事前チェック
](#precheck-descriptions-warnings.mysql)
+ [

### 警告を報告する Aurora MySQL の事前チェック
](#precheck-descriptions-warnings.aurora)

### 警告を報告する MySQL の事前チェック
<a name="precheck-descriptions-warnings.mysql"></a>

次の事前チェックは、コミュニティ MySQL から提供されています。
+ [defaultAuthenticationPlugin](#defaultAuthenticationPlugin)
+ [maxdbFlagCheck](#maxdbFlagCheck)
+ [mysqlDollarSignNameCheck](#mysqlDollarSignNameCheck)
+ [reservedKeywordsCheck](#reservedKeywordsCheck)
+ [utf8mb3Check](#utf8mb3Check)
+ [zeroDatesCheck](#zeroDatesCheck)

**defaultAuthenticationPlugin**  
**事前チェックレベル: Warning**  
**デフォルトの認証プラグインに関する新しい考慮事項**  
MySQL 8.0 では、`caching_sha2_password` 認証プラグインが導入され、廃止された `mysql_native_password` プラグインよりもパスワード暗号化の安全性とパフォーマンスが向上しました。Aurora MySQL バージョン 3 の場合、データベースユーザーに使用されるデフォルトの認証プラグインは `mysql_native_password` プラグインです。  
この事前チェックは、このプラグインが削除され、将来のメジャーバージョンリリースでデフォルトが変更されることを警告します。この変更の前に、アプリケーションクライアントとユーザーの互換性を評価することを検討してください。  
詳細については、MySQL ドキュメントの「[caching\$1sha2\$1password Compatibility Issues and Solutions](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues)」を参照してください。  
**出力例:**  

```
{
  "id": "defaultAuthenticationPlugin",
  "title": "New default authentication plugin considerations",
  "description": "Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file:\n\n[mysqld]\ndefault_authentication_plugin=mysql_native_password\n\nHowever, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security.\nIf you are using replication please take time to understand how the authentication plugin changes may impact you.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues\nhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication"
},
```

**maxdbFlagCheck**  
**事前チェックレベル: Warning**  
**廃止された `MAXDB` `sql_mode` フラグの使用**  
MySQL 8.0 では、非推奨の [sql\$1mode](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode) システム変数オプションがいくつか[削除](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html)されました。そのうちの 1 つは `MAXDB` です。この事前チェックでは、現在接続されているすべてのセッションをルーチンおよびトリガーとともに調べ、`MAXDB` を含む任意の組み合わせに `sql_mode` が設定されていないことを確認します。  
**出力例:**  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "description": "Warning: The following DB objects have the obsolete MAXDB option persisted for sql_mode, which will be cleared during the upgrade. It can potentially change the datatype DATETIME into TIMESTAMP if it is used inside object's definition, and this in turn can change the behavior in case of dates earlier than 1970 or later than 2037. If this is a concern, please redefine these objects so that they do not rely on the MAXDB flag before running the upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.maxdb_stored_routine",
        "description": "PROCEDURE uses obsolete MAXDB sql_mode",
        "dbObjectType": "Routine"
      }
  ]
}
```
事前チェックでは、`test.maxdb_stored_routine` ルーチンにサポートされていない `sql_mode` オプションが含まれていることが報告されます。  
データベースにログインすると、`sql_mode` に `MAXDB` が含まれるルーチン定義が表示されます。  

```
 > SHOW CREATE PROCEDURE test.maxdb_stored_routine\G

*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
問題を解決するには、クライアントで正しい `sql_mode` を設定した後にプロシージャを再作成します。  
[MySQL ドキュメント](https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html)によると、MySQL は、ルーチンを作成または変更したときに有効な `sql_mode` 設定を保存します。ルーチンの開始時の `sql_mode` 設定に関係なく、常にこの設定でルーチンを実行します。  
`sql_mode` を変更する前に、MySQL ドキュメントの「[Server SQL Modes](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html)」を参照してください。アプリケーションへの影響の可能性を慎重に評価します。
サポートされていない `sql_mode` なしでプロシージャを再作成します。  

```
mysql > set sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql > DROP PROCEDURE test.maxdb_stored_routine\G
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER $$
mysql >
mysql > CREATE PROCEDURE test.maxdb_stored_routine()
    -> SQL SECURITY DEFINER
    -> BEGIN
    ->     SELECT * FROM test;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER ;
mysql > show create procedure test.maxdb_stored_routine\G
*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
事前チェックは成功しました。  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "detectedProblems": []
}
```

**mysqlDollarSignNameCheck**  
**事前チェックレベル: Warning**  
**オブジェクト名に非推奨の単一のドル記号が使用されているかどうかをチェックする**  
[MySQL 8.0.32](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html#mysqld-8-0-32-deprecation-removal) 以降、引用符で囲まれていない識別子の最初の文字としてドル記号 (`$`) の使用が廃止されます。`$` を最初の文字として含むスキーマ、テーブル、ビュー、列、またはルーチンがある場合、この事前チェックは警告を返します。この警告はアップグレードの進行を妨げませんが、すぐに対応して解決することをお勧めします。[MySQL 8.4](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html) 以降、このような識別子は警告ではなく構文エラーを返します。  
**出力例:**  

```
{
  "id": "mysqlDollarSignNameCheck",
  "title": "Check for deprecated usage of single dollar signs in object names",
  "status": "OK",
  "description": "Warning: The following objects have names with deprecated usage of dollar sign ($) at the begining of the identifier. To correct this warning, ensure, that names starting with dollar sign, also end with it, similary to quotes ($example$). ",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.$deprecated_syntx",
        "description": " name starts with $ sign."
      }
  ]
},
```
`test` スキーマの `$deprecated_syntx` テーブルに最初の文字として `$` が含まれているため、事前チェックは警告を報告します。

**reservedKeywordsCheck**  
**事前チェックレベル: Warning**  
**新しい予約キーワードと競合する名前を持つデータベースオブジェクトの使用**  
このチェックは、新しい予約キーワードと競合する名前を持つデータベースオブジェクトの使用を確認する点で、[routineSyntaxCheck](#routineSyntaxCheck) に似ています。アップグレードはブロックされませんが、警告を慎重に評価する必要があります。  
**出力例:**  
`except` という名前のテーブルで前の例を使用すると、事前チェックは警告を返します。  

```
{
  "id": "reservedKeywordsCheck",
  "title": "Usage of db objects with names conflicting with new reserved keywords",
  "status": "OK",
  "description": "Warning: The following objects have names that conflict with new reserved keywords. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.except",
        "description": "Table name",
        "dbObjectType": "Table"
      }
  ]
}
```
この警告は、確認すべきアプリケーションクエリが存在する可能性があることを知らせます。アプリケーションクエリが[文字列リテラルから正しくエスケープ](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html)されていない場合、MySQL 8.0 にアップグレードした後にエラーが発生する可能性があります。アプリケーションを確認するために、バージョン 3 で実行されている Aurora MySQL DB クラスターのクローンまたはスナップショットに対してテストを実行します。  
アップグレード後に失敗するエスケープされていないアプリケーションクエリの例:  

```
SELECT * FROM escape;
```
アップグレード後に成功する、正しくエスケープされたアプリケーションクエリの例:  

```
SELECT * FROM 'escape';
```

**utf8mb3Check**  
**事前チェックレベル: Warning**  
**`utf8mb3` 文字セットの使用**  
MySQL 8.0 では、`utf8mb3` 文字セットは廃止され、今後の MySQL メジャーバージョンで削除されます。この事前チェックは、この文字セットを使用するデータベースオブジェクトが検出された場合に警告を生成するために実装されます。これによりアップグレードの進行が妨げられることはありませんが、MySQL 8.0 のデフォルトである `utf8mb4` 文字セットにテーブルを移行することを検討するよう強くお勧めします。[utf8mb3](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) と [utf8mb4](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html) の詳細については、MySQL ドキュメントの「[Converting Between 3-Byte and 4-Byte Unicode Character Sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html)」を参照してください。  
**出力例:**  

```
{
  "id": "utf8mb3",
  "title": "Usage of utf8mb3 charset",
  "status": "OK",
  "description": "Warning: The following objects use the deprecated utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. The utf8mb3 character is subject to removal in the future.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.t1.col1",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      },
      {
        "level": "Warning",
        "dbObject": "test.t1.col2",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      }
  ]
}
```
この問題を解決するには、参照されているオブジェクトとテーブルを再構築します。変換の詳細および前提条件については、MySQL ドキュメントの「[Converting Between 3-Byte and 4-Byte Unicode Character Sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html)」を参照してください。

**zeroDatesCheck**  
**事前チェックレベル: Warning**  
**DATE、DATETIME、および TIMESTAMP のゼロ値**  
MySQL では、DATE、DATETIME、および TIMESTAMP の列でゼロ値の使用に関するより厳格なルールが適用されるようになりました。`NO_ZERO_IN_DATE` および `NO_ZERO_DATE SQL` モードは、今後の MySQL リリースで `strict` モードとマージされるため、`strict` モードと組み合わせて使用することをお勧めします。  
事前チェックの実行時に、データベース接続の `sql_mode` 設定にこれらのモードが含まれていない場合、事前チェックで警告が発生します。ユーザーは、ゼロ値を含む DATE、DATETIME、および TIMESTAMP 値を挿入できる場合があります。ただし、ゼロ値は、将来動作が変化し、正しく機能しない可能性があるため、有効な値に置き換えることを強くお勧めします。これは警告であるため、アップグレードはブロックされませんが、アクションを実行する計画を開始することをお勧めします。  
**出力例:**  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
  ]
}
```

### 警告を報告する Aurora MySQL の事前チェック
<a name="precheck-descriptions-warnings.aurora"></a>

次の事前チェックは、Aurora MySQL に固有のものです。
+ [auroraUpgradeCheckForRollbackSegmentHistoryLength](#auroraUpgradeCheckForRollbackSegmentHistoryLength)
+ [auroraUpgradeCheckForUncommittedRowModifications](#auroraUpgradeCheckForUncommittedRowModifications)

**auroraUpgradeCheckForRollbackSegmentHistoryLength**  
**事前チェックレベル: Warning**  
**クラスターのロールバックセグメント履歴リストの長さが長いかどうかを確認する**  
[auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions) で説明されているように、メジャーバージョンアップグレードプロセスの実行中に、Aurora MySQL バージョン 2 DB インスタンスを[クリーンシャットダウン](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown)する必要があります。これにより、すべてのトランザクションがコミットまたはロールバックされ、InnoDB がすべての undo ログレコードを消去します。  
DB クラスターのロールバックセグメント履歴リストの長さ (HLL) が長い場合、InnoDB が undo ログレコードの消去を完了するのにかかる時間が長くなり、メジャーバージョンのアップグレードプロセス中にダウンタイムが長くなる可能性があります。事前チェックで DB クラスターの HLL が高いことが検出されると、警告を発生します。これによりアップグレードの進行が妨げられることはありませんが、DB クラスターの HLL を注意深くモニタリングすることをお勧めします。低いレベルに保つと、メジャーバージョンのアップグレードに必要なダウンタイムが短縮されます。HLL のモニタリングの詳細については、「[InnoDB 履歴リストの長さが大幅に増加しました](proactive-insights.history-list.md)」を参照してください。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForRollbackSegmentHistoryLength",
  "title": "Checks if the rollback segment history length for the cluster is high",
  "status": "OK",
  "description": "Rollback Segment History length is greater than 1M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_metrics",
        "description": "The InnoDB undo history list length('trx_rseg_history_len') is 82989114. Upgrade may take longer due to purging of undo information for old row versions."
      }
  ]
}
```
事前チェックでは、データベースクラスターの InnoDB undo HLL が長い (82989114) ことが検出されたため、警告が返されます。アップグレードは続行されますが、パージする undo の量によっては、アップグレードプロセスに必要なダウンタイムが延長される可能性があります。  
本番環境でアップグレードを実行する前に、DB クラスターの[オープントランザクション](proactive-insights.history-list.md)を調査し、HLL が管理可能なサイズに保たれていることを確認することをお勧めします。

**auroraUpgradeCheckForUncommittedRowModifications**  
**事前チェックレベル: Warning**  
**コミットされていない行の変更が多数あるかどうかを確認する**  
[auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions) で説明されているように、メジャーバージョンアップグレードプロセスの実行中に、Aurora MySQL バージョン 2 DB インスタンスを[クリーンシャットダウン](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown)する必要があります。これにより、すべてのトランザクションがコミットまたはロールバックされ、InnoDB がすべての undo ログレコードを消去します。  
DB クラスターに多数の行を変更したトランザクションがある場合、クリーンシャットダウンプロセスの一環として、InnoDB がこのトランザクションのロールバックを完了するのにかかる時間を延長できます。事前チェックで、DB クラスターに多数の行が変更された実行時間が長いトランザクションが見つかった場合、警告が発生します。これによりアップグレードの進行が妨げられるわけではありませんが、DB クラスター上のアクティブなトランザクションのサイズを注意深くモニタリングすることをお勧めします。低いレベルに保つと、メジャーバージョンのアップグレードに必要なダウンタイムが短縮されます。  
**出力例:**  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "description": "Database contains uncommitted row changes greater than 10M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_trx",
        "description": "The database contains 11000000 uncommitted row change(s) in 1 transaction(s). Upgrade may take longer due to transaction rollback."
      }
  ]
},
```
事前チェックでは、DB クラスターに、クリーンシャットダウンプロセス中にロールバックする必要がある、コミットされていない行の変更が 11,000,000 件あるトランザクションが含まれていることが報告されます。アップグレードは続行されますが、アップグレードプロセス中のダウンタイムを減らすため、本番稼働用クラスターでアップグレードを実行する前に、これをモニタリングして調査することをお勧めします。  
ライター DB インスタンスでアクティブなトランザクションを表示するには、[information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html) テーブルを使用します。ライター DB インスタンスの以下のクエリは、DB クラスターの現在のトランザクション、実行時間、状態、変更された行を示しています。  

```
# Example of uncommitted transaction
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| 2024-08-12 18:32:52 |                         1592 |                          20041 | 52866130 | RUNNING   |      11000000 |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
1 row in set (0.01 sec)

# Example of transaction rolling back
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state    | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| 2024-08-12 18:32:52 |                         1719 |                          20041 | 52866130 | ROLLING BACK |      10680479 |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
1 row in set (0.01 sec)
```
トランザクションがコミットまたはロールバックされると、事前チェックは警告を返さなくなります。大規模なトランザクションをロールバックする前に、MySQL ドキュメントとアプリケーションチームに相談してください。トランザクションのサイズによっては、ロールバックの完了までに時間がかかる場合があります。  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "detectedProblems": []
},
```
InnoDB トランザクション管理の最適化、および MySQL データベースインスタンスで大規模なトランザクションを実行およびロールバックした場合の潜在的な影響の詳細については、MySQL ドキュメントの「[Optimizing InnoDB Transaction Management](https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-transaction-management.html)」を参照してください。

## 注意
<a name="precheck-descriptions-notices"></a>

次の事前チェックは、事前チェックに失敗してもアップグレードを続行できるときに通知を生成します。

**sqlModeFlagCheck**  
**事前チェックレベル: Notice**  
**廃止された `sql_mode` フラグの使用**  
`MAXDB` に加えて、次のその他の `sql_mode` オプションが[削除](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html)されました: `DB2`、`MSSQL`、`MYSQL323`、`MYSQL40`、`ORACLE`、`POSTGRESQL`、`NO_FIELD_OPTIONS`、`NO_KEY_OPTIONS`、`NO_TABLE_OPTIONS`。MySQL 8.0 以降、これらの値を `sql_mode` システム変数に割り当てることはできません。この事前チェックでこれらの `sql_mode` 設定を使用して開いているセッションが見つかった場合は、DB インスタンスと DB クラスターのパラメータグループ、およびクライアントアプリケーションと設定が無効にするよう更新されていることを確認してください。– 詳細については、「[MySQL ドキュメント](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html)」を参照してください。  
**出力例:**  

```
{
  "id": "sqlModeFlagCheck",
  "title": "Usage of obsolete sql_mode flags",
  "status": "OK",
  "detectedProblems": []
}
```
これらの事前チェックの失敗を解決するには、「[maxdbFlagCheck](#maxdbFlagCheck)」を参照してください。

## エラー、警告、または通知
<a name="precheck-descriptions-all"></a>

次の事前チェックは、事前チェックの出力に応じてエラー、警告、または通知を返す場合があります。

**checkTableOutput**  
**事前チェックレベル: Error、Warning、または Notice**  
**`check table x for upgrade` コマンドによって報告された問題**  
Aurora MySQL バージョン 3 へのアップグレードを開始する前に、`check table for upgrade` は DB クラスター内のユーザースキーマの各テーブルで実行されます。この事前チェックは [checkTableMysqlSchema](#checkTableMysqlSchema) とは異なります。  
`check table for upgrade` コマンドは、MySQL の新しいバージョンへのアップグレード中に発生する可能性のある問題がないかテーブルを調べます。アップグレードを試行する前にこのコマンドを実行すると、互換性がない箇所を事前に特定して解決できるため、実際のアップグレードプロセスがよりスムーズになります。  
このコマンドは、次のような各テーブルに対してさまざまなチェックを実行します。  
+ テーブル構造とメタデータがターゲットの MySQL バージョンと互換性があることを確認する
+ テーブルで使用される廃止または削除された機能を確認する
+ データ損失なしでテーブルを適切にアップグレードできることを確認する
他の事前チェックとは異なり、`check table` の出力に応じてエラー、警告、または通知を返すことがあります。この事前チェックでテーブルが返された場合は、アップグレードを開始する前に、それらをリターンコードとメッセージとともに慎重に確認してください。詳細については、MySQL ドキュメントの「[CHECK TABLE Statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html)」を参照してください。  
ここでは、エラーの例と警告の例を示します。  
**エラーの例:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.parent",
        "description": "Table 'test.parent' doesn't exist"
      }
  ]
},
```
事前チェックでは、`test.parent` テーブルが存在しないというエラーが報告されます。  
ライター DB インスタンスの `mysql-error.log` ファイルには、外部キーエラーがあることを示しています。  

```
2024-08-13T15:32:10.676893Z 62 [Warning] InnoDB: Load table `test`.`parent` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.
2024-08-13T15:32:10.676905Z 62 [Warning] InnoDB: Cannot open table test/parent from the internal data dictionary of InnoDB though the .frm file for the table exists.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
```
ライター DB インスタンスにログインし、`show engine innodb status\G` を実行して、外部キーエラーに関する詳細情報を取得します。  

```
mysql> show engine innodb status\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2024-08-13 15:33:33 0x14ef7b8a1700 INNODB MONITOR OUTPUT
=====================================
.
.
.
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2024-08-13 15:32:10 0x14ef6dbbb700 Error in foreign key constraint of table test/child:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
The index in the foreign key in table is p_name_idx
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
.
.
```
`LATEST FOREIGN KEY ERROR` メッセージは、`test.parent` テーブルを参照する `test.child` テーブル内の `fk_pname` 外部キー制約にインデックスの欠落またはデータ型の不一致があることを示します。MySQL ドキュメントの「[FOREIGN KEY Constraints](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html)」によると、外部キーで参照される列には関連付けられたインデックスが必要であり、親/子列は同じデータ型を使用する必要があります。  
これがインデックスの欠落またはデータ型の不一致に関連しているかどうかを確認するには、データベースにログインし、セッション変数 [foreign\$1key\$1checks](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html#foreign-key-checks) を一時的に無効にしてテーブル定義を確認します。そうすると、問題の子制約 (`fk_pname`) が `p_name varchar(20) CHARACTER SET latin1 DEFAULT NULL` を使用して親テーブル `name varchar(20) NOT NULL` を参照していることがわかります。親テーブルは `DEFAULT CHARSET=utf8` を使用しますが、子テーブルの `p_name` 列は `latin1` を使用するため、データ型の不一致エラーがスローされます。  

```
mysql> show create table parent\G
ERROR 1146 (42S02): Table 'test.parent' doesn't exist

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table parent\G
*************************** 1. row ***************************
       Table: parent
Create Table: CREATE TABLE `parent` (
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
この問題を解決するには、親と同じ文字セットを使用するように子テーブルを変更するか、子テーブルと同じ文字セットを使用するように親を変更します。ここでは、子テーブルが `p_name` 列定義で明示的に `latin1` を使用するため、`ALTER TABLE` を実行して文字セットを `utf8` に変更します。  

```
mysql> alter table child modify p_name varchar(20) character set utf8 DEFAULT NULL;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> flush tables;
Query OK, 0 rows affected (0.01 sec)
```
そうすると、事前チェックに合格し、アップグレードを続行できます。  
**警告の例:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.orders",
        "description": "Trigger test.orders.delete_audit_trigg does not have CREATED attribute."
      }
  ]
}
```
`test.orders` テーブルの `delete_audit_trigg` トリガーに `CREATED` 属性がないため、事前チェックは警告を報告します。MySQL ドキュメントの「[Checking Version Compatibility](https://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-version-compatibility)」によると、このメッセージは情報であり、MySQL 5.7.2 より前に作成されたトリガーに対して印刷されます。  
これは警告であるため、アップグレードの進行は妨げられません。ただし、問題を解決する場合は、問題のトリガーを再作成できます。事前チェックは警告なしで成功します。  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": []
},
```

# インプレースアップグレードの実行手順
<a name="AuroraMySQL.Upgrading.Procedure"></a>

[メジャーバージョンの Aurora MySQL インプレースアップグレードの仕組み](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence) の背景のマテリアルを確認することをお勧めします。

「[Aurora MySQL クラスターのメジャーバージョンアップグレードの計画](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning)」の説明に従い、アップグレード前の計画とテストを行います。

## コンソール
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CON"></a>

次の例では、`mydbcluster-cluster` DB クラスターを Aurora MySQL バージョン 3.04.1 にアップグレードします。

**Aurora MySQL DB クラスターのメジャーバージョンをアップグレードするには**

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

1. 元の DB クラスターでカスタムパラメータグループを使用した場合は、新しいメジャーバージョン互換のパラメータグループを作成します。新しいパラメータグループの設定パラメータに必要な調整を行います。詳細については、「[インプレースアップグレードはクラスターのパラメータグループにどのような影響を与えるか](#AuroraMySQL.Upgrading.ParamGroups)」を参照してください。

1.  ナビゲーションペインで、[**データベース**] を選択します。

1.  リストから、変更する DB クラスターを選択します。

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

1.  **[Version]** (バージョン) で、新しい Aurora MySQL のメジャーバージョンを選択します。

   通常、メジャーバージョンの最新のマイナーバージョンを使用することをお勧めします。ここでは、現在のデフォルトバージョンを選択します。  
![\[Aurora MySQL DB クラスターのバージョン 2 からバージョン 3 へのインプレースアップグレード\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/images/ams-upgrade-v2-v3.png)

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

1.  次のページで、アップグレードを実行するタイミングを指定します。[**次の定期メンテナンス期間中**] または [**今すぐ**] を選択します。

1.  (オプション) アップグレード中、RDS コンソールの [**イベント**] ページを定期的に確認します。これにより、アップグレードの進行状況をモニタリングし、問題を特定することができます。アップグレードで問題が発生した場合は、[Aurora MySQL インプレースアップグレードのトラブルシューティング](AuroraMySQL.Upgrading.Troubleshooting.md) を参照してステップを実行してください。

1. この手順のスタート時に、新しいパラメータグループを作成した場合は、アップグレードしたクラスターにカスタムパラメータグループを関連付けます。詳細については、「[インプレースアップグレードはクラスターのパラメータグループにどのような影響を与えるか](#AuroraMySQL.Upgrading.ParamGroups)」を参照してください。
**注記**  
 このステップを実行するには、クラスターを再起動して新しいパラメータグループを適用する必要があります。

1.  (オプション) アップグレード後のテストが完了したら、アップグレードのスタート時に Aurora によって作成された手動スナップショットを削除します。

## AWS CLI
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CLI"></a>

Aurora MySQL DB クラスターのメジャーバージョンをアップグレードするには、次の必須パラメータを指定しながら、AWS CLI の [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) コマンドを実行します。
+ `--db-cluster-identifier`
+ `--engine-version`
+ `--allow-major-version-upgrade`
+  `--apply-immediately` または `--no-apply-immediately`

クラスターでカスタムパラメータグループを使用する場合は、次のオプションの 1 つ、または両方を含めます。
+ `--db-cluster-parameter-group-name`、クラスターがカスタムクラスターのパラメータグループを使用している場合
+ `--db-instance-parameter-group-name`、クラスター内のインスタンスがカスタム DB のパラメータグループを使用している場合

次の例では、`sample-cluster` DB クラスターを Aurora MySQL バージョン 3.04.1 にアップグレードします。アップグレードは、次のメンテナンスウィンドウを待つことなく、すぐに実行されます。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds modify-db-cluster \
          --db-cluster-identifier sample-cluster \
          --engine-version 8.0.mysql_aurora.3.04.1 \
          --allow-major-version-upgrade \
          --apply-immediately
```
Windows の場合:  

```
aws rds modify-db-cluster ^
          --db-cluster-identifier sample-cluster ^
          --engine-version 8.0.mysql_aurora.3.04.1 ^
          --allow-major-version-upgrade ^
          --apply-immediately
```
他の CLI `modify-db-cluster` コマンドをと組み合わせて、アップグレードを実行および検証するための自動化されたエンドツーエンドのプロセスを作成できます。詳細な説明と例については、「[Aurora MySQL インプレースアップグレードのチュートリアル](AuroraMySQL.Upgrading.Tutorial.md)」を参照してください。

**注記**  
クラスターが Aurora Global Database の一部である場合、インプレースアップグレードの手順は若干異なります。`modify-db-cluster` の代わりに、[modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) コマンドオペレーションを呼び出します。詳細については、「[グローバルデータベースのインプレースメジャーアップグレード](#AuroraMySQL.Upgrading.GlobalDB)」を参照してください。

## RDS API
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.API"></a>

Aurora MySQL DB クラスターのメジャーバージョンをアップグレードするには、次の必須パラメータを指定して RDS API の [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) オペレーションを使用します。
+ `DBClusterIdentifier`
+ `Engine`
+ `EngineVersion`
+ `AllowMajorVersionUpgrade`
+ `ApplyImmediately` (`true`、または `false` に設定)

**注記**  
クラスターが Aurora Global Database の一部である場合、インプレースアップグレードの手順は若干異なります。 `ModifyDBCluster` の代わりに、[ modifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalClusterParameterGroup.html) オペレーションを呼び出します。詳細については、「[グローバルデータベースのインプレースメジャーアップグレード](#AuroraMySQL.Upgrading.GlobalDB)」を参照してください。

## インプレースアップグレードはクラスターのパラメータグループにどのような影響を与えるか
<a name="AuroraMySQL.Upgrading.ParamGroups"></a>

Aurora パラメータグループには、MySQL 5.7 または 8.0 と互換性のあるクラスターとは異なる構成設定のセットがあります。インプレースアップグレードを実行する際、アップグレードされたクラスターとそのすべてのインスタンスで、対応するクラスターおよびインスタンスのパラメータグループを使用する必要があります。

クラスターとインスタンスは、デフォルトの 5.7 互換パラメータグループを使用する場合があります。その場合、アップグレードされたクラスターとインスタンスは、デフォルトの 8.0 互換パラメータグループで開始されます。クラスターとインスタンスでカスタムパラメータグループを使用している場合は、対応する、または 8.0 互換のパラメータグループを作成してください。また、アップグレード処理中に必ずそれらを指定してください。

**注記**  
ほとんどのパラメータ設定では、2 つのポイントでカスタムパラメータグループを選択できます。これらは、クラスターの作成時や、パラメータグループをクラスターに関連付ける場合です。  
ただし、デフォルト以外の設定を `lower_case_table_names` パラメータに使用する場合は、事前にこの設定を使用してカスタム パラメータグループを設定する必要があります。その後、スナップショット復元を実行してクラスターを作成する際、パラメータグループを指定します。クラスター作成後の`lower_case_table_names` パラメータへの変更は、影響がありません。  
Aurora MySQL バージョン 2 からバージョン 3 にアップグレードする場合にも、同じ `lower_case_table_names` の設定を使用することをお勧めします。  
Aurora MySQL に基づく Aurora グローバルデータベースでは、`lower_case_table_names` パラメータがオンの場合、Aurora MySQL バージョン 2 からバージョン 3 へのインプレースアップグレードを実行できません。使用できる方法の詳細については、「[メジャーバージョンのアップグレード](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major)」を参照してください。

**重要**  
 アップグレードプロセス中にカスタムパラメータグループを指定した場合は、アップグレード終了後にクラスターを手動で再起動してください。再起動すると、クラスターがカスタムパラメータ設定の使用をスタートできます。

## Aurora MySQL バージョン間のクラスターのプロパティの変更
<a name="AuroraMySQL.Upgrading.Attrs"></a>

Aurora MySQL バージョン 2 からバージョン 3 にアップグレードする場合は、Aurora MySQL クラスターと DB インスタンスのセットアップと管理に使用するアプリケーションやスクリプトを確認してください。

また、5.7 および 8.0 互換クラスターではデフォルトのパラメータグループ名が異なることを考慮して、パラメータグループを操作するコードを変更します。Aurora MySQL バージョン 2 と 3 のクラスターのデフォルトのパラメータグループ名は、それぞれ `default.aurora-mysql5.7` と `default.aurora-mysql8.0` です。

例えば、アップグレード前にクラスターに適用される次のようなコードがあるとします。

```
# Check the default parameter values for MySQL 5.7–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --region us-east-1
```

 クラスターのメジャーバージョンをアップグレードした後、そのコードを次のように変更します。

```
# Check the default parameter values for MySQL 8.0–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 --region us-east-1
```

## グローバルデータベースのインプレースメジャーアップグレード
<a name="AuroraMySQL.Upgrading.GlobalDB"></a>

 Aurora Global Database の場合は、グローバルデータベースクラスターをアップグレードします。Aurora は、すべてのクラスターを同時かつ自動的にアップグレードし、すべてのクラスターで、同じエンジンバージョンが実行されることを保証します。これは、システムテーブルやデータファイル形式などの変更が、すべてのセカンダリクラスターに自動的にレプリケートされるためです。

「[メジャーバージョンの Aurora MySQL インプレースアップグレードの仕組み](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence)」の手順に従います。アップグレードする対象を指定するときは、そのデータベースに含まれるクラスターの 1 つではなく、グローバルデータベースクラスターを選択してください。

AWS マネジメントコンソール を使用する場合、**[Global database]** (グローバルデータベース) のロールを持つアイテムを選択します。

![\[グローバルデータベースクラスターをアップグレードする\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/images/aurora-global-databases-major-upgrade-global-cluster.png)


 AWS CLI または RDS API を使用する場合は、[modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) コマンドまたは [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalCluster.html) オペレーションを呼び出して、アップグレードプロセスをスタートします。`modify-db-cluster` または `ModifyDBCluster` の代わりにこれらのいずれかを使用します。

**注記**  
Aurora グローバルデータベースのメジャーバージョンアップグレードを実行している間、グローバルデータベースクラスターのカスタムパラメータグループを指定することはできません。グローバルクラスターの各リージョンにカスタムパラメータグループを作成します。次に、アップグレード後に手動でリージョンクラスターに適用します。

 AWS CLI を使用して Aurora MySQL グローバルデータベースクラスターのメジャーバージョンをアップグレードするには、以下の必須パラメータを指定して、[modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) コマンドを使用します。
+  `--global-cluster-identifier` 
+  `--engine aurora-mysql` 
+  `--engine-version` 
+  `--allow-major-version-upgrade` 

次の例では、グローバルデータベースクラスターを Aurora MySQL バージョン 2.10.2 にアップグレードします。

**Example**  
Linux、macOS、Unix の場合:  

```
aws rds modify-global-cluster \
          --global-cluster-identifier global_cluster_identifier \
          --engine aurora-mysql \
          --engine-version 5.7.mysql_aurora.2.10.2 \
          --allow-major-version-upgrade
```
Windows の場合:  

```
aws rds modify-global-cluster ^
          --global-cluster-identifier global_cluster_identifier ^
          --engine aurora-mysql ^
          --engine-version 5.7.mysql_aurora.2.10.2 ^
          --allow-major-version-upgrade
```

## バックトラックに関する考慮事項
<a name="AuroraMySQL.Upgrading.Backtrack"></a>

アップグレードしたクラスターでバックトラック機能が有効になっている場合、アップグレードしたクラスターをアップグレード前の時間にバックトラックすることはできません。

# Aurora MySQL インプレースアップグレードのチュートリアル
<a name="AuroraMySQL.Upgrading.Tutorial"></a>

次の Linux の例では、AWS CLI を使用してインプレースアップグレードの一般的なステップを実行する方法を示します。

この最初の例では、2.x バージョンの Aurora MySQL を実行する Aurora DB クラスターを作成します。クラスターには、ライター DB インスタンスとリーダー DB インスタンスが含まれます。`wait db-instance-available` コマンドは、ライター DB インスタンスが利用可能になるまで一時停止します。クラスターをアップグレードする準備ができた時点です。

```
aws rds create-db-cluster --db-cluster-identifier mynewdbcluster --engine aurora-mysql \
  --db-cluster-version 5.7.mysql_aurora.2.11.2
...
aws rds create-db-instance --db-instance-identifier mynewdbcluster-instance1 \
  --db-cluster-identifier mynewdbcluster --db-instance-class db.t4g.medium --engine aurora-mysql
...
aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

クラスターをアップグレードできる Aurora MySQL 3.x バージョンは、クラスターが現在実行している 2.x バージョンと、クラスターがある AWS リージョン によって異なります。`--output text` による初期のコマンドは、使用可能なターゲットバージョンだけを表示させます。2 番目のコマンドは、レスポンスの完全な JSON 出力を表示します。その応答では、`engine` パラメータに使用した `aurora-mysql` 値などの詳細を確認できます。また、3.04.0 へのアップグレードがメジャーバージョンアップグレードであることがわかります。

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.2 \
  --query '*[].[ValidUpgradeTarget]'
...
{
    "Engine": "aurora-mysql",
    "EngineVersion": "8.0.mysql_aurora.3.04.0",
    "Description": "Aurora MySQL 3.04.0 (compatible with MySQL 8.0.28)",
    "AutoUpgrade": false,
    "IsMajorVersionUpgrade": true,
    "SupportedEngineModes": [
        "provisioned"
    ],
    "SupportsParallelQuery": true,
    "SupportsGlobalDatabases": true,
    "SupportsBabelfish": false,
    "SupportsIntegrations": false
},
...
```

この例では、クラスターの有効なアップグレードターゲットではないターゲットバージョン番号が入力された場合に、Aurora がアップグレードを実行しないようにする方法を示しています。Aurora は、`--allow-major-version-upgrade` パラメータを指定しない限り、メジャーバージョンのアップグレードを実行しません。これにより、アプリケーションコードの大規模なテストや変更を必要とする可能性のあるアップグレードを誤って実行することはありません。

```
aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 5.7.mysql_aurora.2.09.2 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: Cannot find upgrade target from 5.7.mysql_aurora.2.11.2 with requested version 5.7.mysql_aurora.2.09.2.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --region us-east-1 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --apply-immediately --allow-major-version-upgrade
{
  "DBClusterIdentifier": "mynewdbcluster",
  "Status": "available",
  "Engine": "aurora-mysql",
  "EngineVersion": "5.7.mysql_aurora.2.11.2"
}
```

 クラスターおよび関連付けられた DB インスタンスのステータスが `upgrading` に変わるまで、しばらく時間がかかります。クラスターおよび DB インスタンスのバージョン番号は、アップグレードが完了したときにのみ変更されます。この場合も、ライター DB インスタンスの `wait db-instance-available` コマンドを使用して、アップグレードが完了するまで待機してから続行します。

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[Status,EngineVersion]' --output text
upgrading 5.7.mysql_aurora.2.11.2

aws rds describe-db-instances --db-instance-identifier mynewdbcluster-instance1 \
  --query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,DBInstanceStatus:DBInstanceStatus} | [0]'
{
    "DBInstanceIdentifier": "mynewdbcluster-instance1",
    "DBInstanceStatus": "upgrading"
}

aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

 この時点で、クラスターのバージョン番号が、アップグレード用に指定されたバージョン番号と一致します。

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[EngineVersion]' --output text

8.0.mysql_aurora.3.04.0
```

前の例では、`--apply-immediately` パラメータを指定して即時のアップグレードを実行しました。クラスターがビジー状態ではないと予想される都合の良いときにアップグレードを実行するために、`--no-apply-immediately` パラメータを指定できます。これにより、クラスターの次のメンテナンスウィンドウの表示中にアップグレードがスタートされます。メンテナンスウィンドウでは、メンテナンスオペレーションをスタートできる期間を定義します。長時間実行されるオペレーションは、メンテナンスウィンドウの中で終了しない場合があります。したがって、アップグレードに長時間かかることが予想される場合でも、より大きなメンテナンスウィンドウを定義する必要はありません。

次の例では、初期に Aurora MySQL バージョン 2.11.2 を実行しているクラスターをアップグレードします。`describe-db-engine-versions` 出力では、`False` および `True` 値は `IsMajorVersionUpgrade` プロパティを表します。バージョン 2.11.2 から、他の 2.\$1 バージョンにアップグレードできます。これらのアップグレードはメジャーバージョンアップグレードとはみなされないため、一括アップグレードは必要ありません。インプレースアップグレードは、リストに示されている 3.\$1 バージョンへのアップグレードでのみ利用できます。

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.10.2 \
  --query '*[].[ValidUpgradeTarget]|[0][0]|[*].[EngineVersion,IsMajorVersionUpgrade]' --output text

5.7.mysql_aurora.2.11.3 False
5.7.mysql_aurora.2.11.4 False
5.7.mysql_aurora.2.11.5 False
5.7.mysql_aurora.2.11.6 False
5.7.mysql_aurora.2.12.0 False
5.7.mysql_aurora.2.12.1 False
5.7.mysql_aurora.2.12.2 False
5.7.mysql_aurora.2.12.3 False
8.0.mysql_aurora.3.04.0 True
8.0.mysql_aurora.3.04.1 True
8.0.mysql_aurora.3.04.2 True
8.0.mysql_aurora.3.04.3 True
8.0.mysql_aurora.3.05.2 True
8.0.mysql_aurora.3.06.0 True
8.0.mysql_aurora.3.06.1 True
8.0.mysql_aurora.3.07.1 True

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --no-apply-immediately --allow-major-version-upgrade
...
```

指定されたメンテナンスウィンドウを使用せずにクラスターを作成する場合、Aurora はランダムな曜日を選択します。この場合、`modify-db-cluster` コマンドは月曜日に送信されます。したがって、メンテナンスウィンドウを火曜日の朝に変更します。すべての時刻は UTC タイムゾーンで表されます。`tue:10:00-tue:10:30` 期間は、太平洋標準時の午前 2 時から 2 時 30 分に相当します。メンテナンスウィンドウの変更はすぐに有効になります。

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "sat:08:20-sat:08:50"
    ]
]

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster --preferred-maintenance-window tue:10:00-tue:10:30"
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "tue:10:00-tue:10:30"
    ]
]
```

次に、アップグレードによって生成されたイベントのレポートを取得する例を示します。`--duration` 引数は、イベント情報を取得する時間 (分) を表します。デフォルトでは、`describe-events` は過去 1 時間のイベントのみを返すため、この引数が必要です。

```
aws rds describe-events --source-type db-cluster --source-identifier mynewdbcluster --duration 20160
{
    "Events": [
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "DB cluster created",
            "EventCategories": [
                "creation"
            ],
            "Date": "2022-11-17T01:24:11.093000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing online pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:08.450000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing offline pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:59.519000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Creating pre-upgrade snapshot [preupgrade-mynewdbcluster-5-7-mysql-aurora-2-10-2-to-8-0-mysql-aurora-3-02-0-2022-11-18-22-55].",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:00:22.318000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Cloning volume.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:01:45.428000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:02:25.141000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:23.036000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Upgrading database objects.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:48.208000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster major version has been upgraded",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:10:28.999000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        }
    ]
}
```

# Aurora MySQL メジャーバージョンアップグレードが失敗する理由を確認する
<a name="AuroraMySQL.Upgrading.failure-events"></a>

[チュートリアル](AuroraMySQL.Upgrading.Tutorial.md)では、Aurora MySQL バージョン 2 からバージョン 3 へのアップグレードに成功しました。ただし、アップグレードが失敗した場合は、必要に応じて、その理由を確認できます。

まず、`describe-events` AWS CLI コマンドを使用して DB クラスターのイベントを表示できます。この例は、過去 10 時間の `mydbcluster` のイベントを示しています。

```
aws rds describe-events \
    --source-type db-cluster \
    --source-identifier mydbcluster \
    --duration 600
```

この例では、アップグレードの事前チェックが失敗しています。

```
{
    "Events": [
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster engine version upgrade started.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:22.846000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        },
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster is in a state that cannot be upgraded: Upgrade prechecks failed. For more details, see the  
             upgrade-prechecks.log file. For more information on troubleshooting the cause of the upgrade failure, see 
             https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:24.373000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        }
    ]
}
```

問題の正確な原因を診断するには、ライター DB インスタンスのデータベースログを調べます。Aurora MySQL バージョン 3 へのアップグレードが失敗すると、ライターインスタンスに `upgrade-prechecks.log` という名前のログファイルが追加されます。この例では、そのログの存在を検出し、それを調査のためにローカルファイルにダウンロードする方法を示します。

```
aws rds describe-db-log-files --db-instance-identifier mydbcluster-instance \
    --query '*[].[LogFileName]' --output text

error/mysql-error-running.log
error/mysql-error-running.log.2024-04-11.20
error/mysql-error-running.log.2024-04-11.21
error/mysql-error.log
external/mysql-external.log
upgrade-prechecks.log

aws rds download-db-log-file-portion --db-instance-identifier mydbcluster-instance \
    --log-file-name upgrade-prechecks.log \
    --starting-token 0 \
    --output text >upgrade_prechecks.log
```

この `upgrade-prechecks.log` ファイルは JSON 形式です。別の JSON ラッパー内で JSON 出力がエンコードされないように、`--output text` オプションを使用してこのファイルをダウンロードします Aurora MySQL バージョン 3 のアップグレードでは、このログには常に、特定の情報と警告メッセージが含まれます。エラーメッセージは、アップグレードが失敗した場合にのみ含まれます。アップグレードが成功すると、ログファイルはまったく生成されません。

すべてのエラーを集約して関連するオブジェクトや説明のフィールドを表示するには、`upgrade-prechecks.log` ファイルの内容に対して `grep -A 2 '"level": "Error"'` コマンドを実行できます。これにより、各エラー行とその後の 2 行が表示されます。これらの行には、対応するデータベースオブジェクトの名前と、問題の修正方法に関するガイダンスが含まれています。

```
$ cat upgrade-prechecks.log | grep -A 2 '"level": "Error"'

"level": "Error",
"dbObject": "problematic_upgrade.dangling_fulltext_index",
"description": "Table `problematic_upgrade.dangling_fulltext_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
```

この例では、問題のあるテーブルに対して次の SQL コマンドを実行して問題の解決を試みるか、ダングリングインデックスなしでテーブルを再作成することができます。

```
OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;
```

次に、アップグレードを再試行します。

# Aurora MySQL インプレースアップグレードのトラブルシューティング
<a name="AuroraMySQL.Upgrading.Troubleshooting"></a>

以下のヒントを使用して、Aurora MySQL インプレースアップグレードに関する問題のトラブルシューティングを行います。これらのヒントは、Aurora Serverless DB クラスターには適用されません。


| インプレースアップグレードがキャンセルされた、または遅い理由 | 効果 | メンテナンス期間内にインプレースアップグレードを完了するためのソリューション | 
| --- | --- | --- | 
| 関連する Aurora クロスリージョンレプリカに対するパッチが未適用 | Aurora はアップグレードをキャンセルします。 | Aurora クロスリージョンレプリカをアップグレードして、もう一度試します。 | 
| クラスターに準備済み状態の XA トランザクションがある | Aurora はアップグレードをキャンセルします。 | 準備済みのすべての XA トランザクションをコミットまたはロールバックします。 | 
| クラスターはデータ定義言語 (DDL) ステートメントを処理しています | Aurora はアップグレードをキャンセルします。 | すべての DDL ステートメントが終了したら、アップグレードを待って実行することをお勧めします。 | 
| クラスターの多くの行で、コミットされていない変更があります | アップグレードには長時間かかる場合があります。 |  アップグレードプロセスは、コミットされていない変更をロールバックします。この条件のインジケータは、`TRX_ROWS_MODIFIED` テーブル内の `INFORMATION_SCHEMA.INNODB_TRX` の値です。 すべての大きなトランザクションがコミットまたはロールバックされた後にのみ、アップグレードを実行することをお勧めします。  | 
| クラスターには多数の UNDO レコードがあります | アップグレードには長時間かかる場合があります。 |  コミットされていないトランザクションが多数の行に影響を与えない場合でも、大量のデータが含まれる可能性があります。例えば、大きな BLOB を挿入する場合などです。Aurora は、この種のトランザクションアクティビティのイベントを自動的に検出または生成しません。この条件のインジケータは、履歴リスト (HLL) の長さです。アップグレードプロセスは、コミットされていない変更をロールバックします。 HLL は、`SHOW ENGINE INNODB STATUS` SQL コマンドからの出力で確認することも、次の SQL クエリを使用して直接確認することもできます。 <pre>SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';</pre> また、Amazon CloudWatch で `RollbackSegmentHistoryListLength` メトリクスをモニタリングすることもできます。 HLL の長さが短くなった後にのみ、アップグレードを実行することをお勧めします。  | 
| クラスターは、大きなバイナリログトランザクションをコミット中です | アップグレードには長時間かかる場合があります。 |  アップグレードプロセスは、バイナリログの変更が適用されるまで待ちます。この期間中にさらに多くのトランザクションまたは DDL ステートメントがスタートされる可能性があり、アップグレードプロセスの速度はさらに低下します。 クラスターがバイナリログレプリケーションの変更を生成するためのビジー状態でない場合に、アップグレードプロセスがスケジュールされます。Aurora は、この条件のイベントを自動的に検出または生成しません。  | 
| ファイルの削除または破損によるスキーマの不一致 | Aurora はアップグレードをキャンセルします。 |  一時テーブルのデフォルトのストレージエンジンを MyISAM から InnoDB に変更します。以下のステップを実行します。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  | 
| マスターユーザーが削除されました | Aurora はアップグレードをキャンセルします。 |   マスターユーザーを削除しないでください。  ただし、何らかの理由でマスターユーザーを削除する必要がある場合は、次の SQL コマンドを使用して復元します。 <pre>CREATE USER 'master_username'@'%' IDENTIFIED BY 'master_user_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;<br /><br />GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, <br />LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, <br />TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'master_username'@'%' WITH GRANT OPTION;</pre>  | 

アップグレードの事前チェックの失敗を起こす問題のトラブルシューティングの詳細については、以下のブログを参照してください。
+ [Amazon Aurora MySQL バージョン 2 (MySQL 5.7 互換) からバージョン 3 (MySQL 8.0 互換) へのアップグレードチェックリスト、パート 1](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-1/)
+ [Amazon Aurora MySQL バージョン 2 (MySQL 5.7 互換) からバージョン 3 (MySQL 8.0 互換) へのアップグレードチェックリスト、パート 2](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2/)

 以下のステップを使用して、上記の表の一部の条件に対して独自のチェックを実行できます。これにより、データベースがアップグレードを正常かつ迅速に完了できる状態にあることが分かっているときに、アップグレードをスケジュールすることができます。
+  `XA RECOVER` ステートメントを実行することで、開いている XA トランザクションを確認できます。アップグレードのスタート前に、XA トランザクションをコミットまたはロールバックできます。
+  `SHOW PROCESSLIST` ステートメントを実行し、出力で`CREATE`、`DROP`、`ALTER`、`RENAME`、および `TRUNCATE` ステートメントを探して、DDL ステートメントを確認できます。アップグレードのスタート前に、すべての DDL ステートメントを完了させます。
+  `INFORMATION_SCHEMA.INNODB_TRX` テーブルをクエリすることで、コミットされていない行の総数を確認できます。テーブルには、トランザクションごとに 1 つの行が含まれます。`TRX_ROWS_MODIFIED` 列には、トランザクションによって変更または挿入された行の数が含まれます。
+  InnoDB 履歴リストの長さを確認するには、`SHOW ENGINE INNODB STATUS SQL` ステートメントを実行し、出力で `History list length` を探します。次のクエリを実行して、値を直接確認することもできます。

  ```
  SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';
  ```

   履歴リストの長さは、マルチバージョン同時実行制御 (MVCC) の実装のためにデータベースに保存される UNDO 情報の量に対応します。

# Aurora MySQL バージョン 3 のアップグレード後のクリーンアップ
<a name="AuroraMySQL.mysql80-post-upgrade"></a>

Aurora MySQL バージョン 2 クラスターを Aurora MySQL バージョン 3 にアップグレードした後、次のようなその他のクリーンアップアクションを実行できます。
+ カスタム パラメータグループの新しい MySQL 8.0 互換バージョンを作成します。必要なカスタムパラメータ値を新しいパラメータグループに適用します。
+ CloudWatch アラーム、セットアップスクリプトなどを更新して、インクルーシブな言語変更の影響を受けた名前のメトリクスに、新しい名前を使用します。このようなメトリクスの一覧は、[Aurora MySQL バージョン 3 に対する包括的な言語変更](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language) をご覧ください。
+ CloudFormation テンプレートをすべて更新して、包括的な言語の変更によって影響を受けるすべてのコンフィギュレーション パラメータの名前を新しくします。そのようなパラメータのリストについては、[Aurora MySQL バージョン 3 に対する包括的な言語変更](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language) を参照してください。

## 空間インデックス
<a name="AuroraMySQL.mysql80-spatial"></a>

Aurora MySQL バージョン 3 にアップグレードした後、空間インデックスに関連するオブジェクトおよびインデックスを削除または再作成する必要があるかどうかをチェックします。MySQL 8.0 より前では、Aurora は空間リソース識別子 (SRID) を含まないインデックスを使用して空間クエリを最適化できました。Aurora MySQL バージョン 3 では、SRID を含む空間インデックスのみを使用します。アップグレード中、Aurora は SRID のない空間インデックスを自動的にドロップし、警告メッセージをデータベースログに出力します。このような警告メッセージが表示された場合は、アップグレード後に SRID を使用して新しい空間インデックスを作成します。MySQL 8.0 での空間関数とデータ型の変更の詳細については、[MySQL リファレンスマニュアル](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html)の「*MySQL 8.0 での変更*」を参照してください。