

# Aurora MySQL バージョン 2 と Aurora MySQL バージョン 3 の比較
<a name="AuroraMySQL.Compare-v2-v3"></a>

Aurora MySQL バージョン 2 クラスターをバージョン 3 にアップグレードする際に注意すべき変更については、以下を参照してください。

**Topics**
+ [アトミックデータ定義言語 (DDL) のサポート](#AuroraMySQL.Compare-v2-v3-atomic-ddl)
+ [Aurora MySQL バージョン 2 と 3 の特徴の違い](#AuroraMySQL.Compare-v2-v3-features)
+ [インスタンスクラスのサポート](#AuroraMySQL.mysql80-instance-classes)
+ [Aurora MySQL バージョン 3 のパラメータ変更](#AuroraMySQL.mysql80-parameter-changes)
+ [ステータス可変](#AuroraMySQL.mysql80-status-vars)
+ [Aurora MySQL バージョン 3 に対する包括的な言語変更](#AuroraMySQL.8.0-inclusive-language)
+ [AUTO\_INCREMENT 値](#AuroraMySQL.mysql80-autoincrement)
+ [バイナリログレプリケーション](#AuroraMySQL.mysql80-binlog)

## アトミックデータ定義言語 (DDL) のサポート
<a name="AuroraMySQL.Compare-v2-v3-atomic-ddl"></a>

MySQL 5.7 から 8.0 への最大の変更の 1 つは、[アトミックデータディクショナリ](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)の導入です。MySQL 8.0 より前では、MySQL データディクショナリはファイルベースのアプローチを使用して、テーブル定義 (.frm)、トリガー (.trg)、関数などのメタデータをストレージエンジンのメタデータ (InnoDB など) とは別に保存していました。これには、DDL オペレーション中に予期しない事態が発生した場合にテーブルが "[孤立](https://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting-datadict.html)" し、ファイルベースとストレージエンジンのメタデータが同期しなくなるリスクなど、いくつかの問題がありました。

これを修正するために、MySQL 8.0 は、`mysql` スキーマ内の内部 InnoDB テーブルのセットにすべてのメタデータを保存するアトミックデータディクショナリを導入しました。この新しいアーキテクチャは、古いファイルベースのアプローチから "アトミック DDL" 問題を解決し、データベースメタデータを管理するトランザクションの [ACID](https://en.wikipedia.org/wiki/ACID) 準拠の方法を提供します。アトミックデータディクショナリの詳細については、「MySQL リファレンスマニュアル」の「[Removal of file-based metadata storage](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html)」と「[Atomic data definition statement support](https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html)」を参照してください。**

このアーキテクチャの変更により、Aurora MySQL バージョン 2 からバージョン 3 にアップグレードする際には、次の点を考慮する必要があります。
+ バージョン 2 からのファイルベースのメタデータは、バージョン 3 へのアップグレードプロセス中に新しいデータディクショナリテーブルに移行する必要があります。移行されるデータベースオブジェクトの数によっては、時間がかかる場合があります。
+ また、この変更により、MySQL 5.7 から 8.0 にアップグレードする前に対処する必要がある可能性のある新しい非互換性が導入されました。例えば、8.0 には、既存のデータベースオブジェクト名と競合する可能性のある新しい予約キーワードがいくつかあります。

エンジンをアップグレードする前にこれらの非互換性を特定するため、Aurora MySQL は一連のアップグレード互換性チェック (事前チェック) を実行して、データディクショナリのアップグレードを実行する前に、データベースディクショナリに互換性のないオブジェクトがあるかどうかを判断します。事前チェックの詳細については、「[Aurora MySQL のメジャーバージョンアップグレードの事前チェック](AuroraMySQL.upgrade-prechecks.md)」を参照してください。

## Aurora MySQL バージョン 2 と 3 の特徴の違い
<a name="AuroraMySQL.Compare-v2-v3-features"></a>

次の Amazon Aurora MySQL 機能は Aurora MySQL 5.7 でサポートされていますが、これらの機能は現在 MySQL 8.0 の Aurora MySQL ではサポートされていません。
+ Aurora Serverless v1 クラスターに Aurora MySQL バージョン 3 を使用することはできません。Aurora MySQL バージョン 3 は Aurora Serverless v2 で動作します。
+ ラボモードは Aurora MySQL バージョン 3 には適用されません。Aurora MySQL バージョン 3 には、ラボモードの機能はありません。インスタント DDL は、過去にラボモードで使用可能だった高速オンライン DDL特徴よりも優先されます。例については、「[インスタント DDL (Aurora MySQL バージョン 3)](AuroraMySQL.Managing.FastDDL.md#AuroraMySQL.mysql80-instant-ddl)」を参照してください。
+ クエリキャッシュはコミュニティ MySQL 8.0 から削除され、Aurora MySQL バージョン 3 からも削除されます。
+ Aurora MySQL バージョン 3 はコミュニティ MySQL ハッシュ統合特徴と互換性があります。ハッシュ結合の Aurora 固有の実装は Aurora MySQL バージョン 2 では使用されていません。ハッシュ結合を Aurora パラレルクエリで使用する方法については、[パラレルクエリクラスターのハッシュ結合の有効化](aurora-mysql-parallel-query-enabling.md#aurora-mysql-parallel-query-enabling-hash-join) および [Aurora MySQL のヒント](AuroraMySQL.Reference.Hints.md) を参照してください。ハッシュ結合の一般的な使用方法については、*MySQL リファレンスマニュアル*の[ハッシュ結合の最適化](https://dev.mysql.com/doc/refman/8.0/en/hash-joins.html)を参照してください。
+ Aurora MySQL バージョン 2 で非推奨であったた `mysql.lambda_async` ストアドプロシージャは、バージョン 3 で削除されます。バージョン 3 では、非同期関数 `lambda_async` を代わりに使用します。
+ Aurora MySQL バージョン 3 のデフォルト文字セットは `utf8mb4` です。Aurora MySQL バージョン 2 のデフォルト文字セットは `latin1` です。この文字セットの詳細については、*MySQL リファレンスマニュアル*の[utf8mb4 文字セット (4 バイトの UTF-8 Unicode エンコード)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html)を参照してください。

Aurora MySQL の一部の機能は、AWS リージョンと DB エンジンのバージョンの特定の組み合わせで利用可能です。詳細については、「[AWS リージョン と Aurora DB エンジンにより Amazon Aurora でサポートされている機能](Concepts.AuroraFeaturesRegionsDBEngines.grids.md)」を参照してください。

## インスタンスクラスのサポート
<a name="AuroraMySQL.mysql80-instance-classes"></a>

Aurora MySQL バージョン 3 では、Aurora MySQL バージョン 2 とは異なるインスタンスクラスのセットがサポートされています。
+ 大規模なインスタンスの場合は、`db.r5` や `db.r6g`、`db.x2g` のような最新のインスタンスクラスを使用できます。
+ 小規模なインスタンスの場合は、`db.t3` や `db.t4g` のような最新のインスタンスクラスを使用できます。
**注記**  
T DB インスタンスクラスは、開発サーバーおよびテストサーバー、またはその他の本稼働以外のサーバーにのみ使用することをお勧めします。T インスタンスクラスの詳細については、「[開発やテストのための T インスタンスクラスの使用](AuroraMySQL.BestPractices.Performance.md#AuroraMySQL.BestPractices.T2Medium)」を参照してください。

Aurora MySQL バージョン 2 の以下のインスタンスクラスは、Aurora MySQL バージョン 3 では使用できません。
+  `db.r4` 
+  `db.r3` 
+  `db.t3.small` 
+  `db.t2` 

 Aurora MySQL DB インスタンスを作成する CLI ステートメントを、すべて作成していないかどうかを管理スクリプトでチェックします。Aurora MySQL バージョン 3 では利用できないインスタンスクラス名をハードコードします。必要に応じて、Aurora MySQL バージョン 3 がサポートするインスタンス名に、インスタンスクラス名を変更します。

**ヒント**  
 Aurora MySQL バージョンと AWS リージョンの特定の組み合わせに使えるインスタンスクラスをチェックするには、`describe-orderable-db-instance-options` AWS CLI コマンドを使用して下さい。

 Aurora インスタンスクラスの詳細については、[Amazon Aurora DB インスタンスクラス](Concepts.DBInstanceClass.md) を参照してください。

## Aurora MySQL バージョン 3 のパラメータ変更
<a name="AuroraMySQL.mysql80-parameter-changes"></a>

Aurora MySQL バージョン 3 には、新しいクラスターレベルおよびインスタンスレベルの設定パラメータが含まれています。Aurora MySQL バージョン 3 では、Aurora MySQL バージョン 2 に存在していたいくつかのパラメータも削除されます。一部のパラメータ名は、包括語のイニシアチブの結果として変更されます。下位互換性のために、古い名前または新しい名前を使用してパラメータ値を取得できます。ただし、カスタム パラメータグループ内のパラメータ値を指定するには、新しい名前を使用する必要があります。

Aurora MySQL バージョン 3 では、`lower_case_table_names` パラメータ値はクラスターの作成時に永続的に設定されます。このオプションにデフォルト以外の値を使用する場合は、アップグレードする前に Aurora MySQL バージョン 3 のカスタム パラメータグループを設定します。次に、クラスターの作成またはスナップショットの復元操作中にパラメータグループを指定します。

**注記**  
Aurora MySQL に基づく Aurora グローバルデータベースでは、`lower_case_table_names` パラメータがオンの場合、Aurora MySQL バージョン 2 からバージョン 3 へのインプレースアップグレードを実行できません。代わりに、スナップショット復元方法を使用してください。

Aurora MySQL バージョン 3 では、`init_connect` および `read_only` パラメータは `CONNECTION_ADMIN` 権限を持つユーザーには適用されません。これには Aurora マスターユーザーが含まれます。詳細については、「[ロールベースの特権モデル](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model)」を参照してください。

すべての Aurora MySQL クラスターパラメータのリストについては、「[クラスターレベルのパラメータ](AuroraMySQL.Reference.ParameterGroups.md#AuroraMySQL.Reference.Parameters.Cluster)」を参照してください。この表では、Aurora MySQL バージョン 2 および 3 のすべてのパラメータについて説明します。この表には、Aurora MySQL バージョン 3 で新しく追加されたパラメータや Aurora MySQL バージョン 3 から削除されたパラメータを示す注記が含まれています。

すべての Aurora MySQL インスタンスパラメータのリストについては、「[インスタンスレベルのパラメータ](AuroraMySQL.Reference.ParameterGroups.md#AuroraMySQL.Reference.Parameters.Instance)」を参照してください。この表では、Aurora MySQL バージョン 2 および 3 のすべてのパラメータについて説明します。この表には、Aurora MySQL バージョン 3 で新しく追加されたパラメータがどれか、また Aurora MySQL バージョン 3 から削除されたパラメータはどれかを示した注記が含まれています。また、Aurora MySQL バージョン 3 ではなく、以前のバージョンで変更可能なパラメータを示す注記も含まれています。

変更されたパラメータ名の詳細については、[Aurora MySQL バージョン 3 に対する包括的な言語変更](#AuroraMySQL.8.0-inclusive-language) を参照してください。

## ステータス可変
<a name="AuroraMySQL.mysql80-status-vars"></a>

Aurora MySQL に適用できないステータス可変の詳細については、[Aurora MySQL に適応されない MySQL ステータス可変](AuroraMySQL.Reference.GlobalStatusVars.md#AuroraMySQL.Reference.StatusVars.Inapplicable) を参照してください。

## Aurora MySQL バージョン 3 に対する包括的な言語変更
<a name="AuroraMySQL.8.0-inclusive-language"></a>

 Aurora MySQL バージョン 3 は MySQL コミュニティ エディションのバージョン 8.0.23 と互換性があります。Aurora MySQL バージョン 3 には、包括語のキーワードやシステムスキーマに関連した MySQL 8.0.26 からの変更も含まれています。例えば、今では `SHOW SLAVE STATUS` の代わりに`SHOW REPLICA STATUS` コマンドが優先されるようになりました。

 次の Amazon CloudWatch メトリクスには、Aurora MySQL バージョン 3 の新しい名前が付けられています。

 Aurora MySQL バージョン 3 では、新しいメトリクス名のみを使用できます。Aurora MySQL バージョン 3 にアップグレードするときは、メトリクス名に依存するアラームやその他のオートメーションを必ず更新してください。


|  現在の名前  |  新しい名前  | 
| --- | --- | 
|  ForwardingMasterDMLLatency  |  ForwardingWriterDMLLatency  | 
|  ForwardingMasterOpenSessions  |  ForwardingWriterOpenSessions  | 
|  AuroraDMLRejectedMasterFull  |  AuroraDMLRejectedWriterFull  | 
|  ForwardingMasterDMLThroughput  |  ForwardingWriterDMLThroughput  | 

 Aurora MySQL バージョン 3 では、次のステータス可変に新しい名前が追加されました。

 Aurora MySQL バージョン 3 の初期のリリースでは、互換性のためにいずれかの名前を使用できます。古いステータス可変名は、将来のリリースで削除される予定です。


|  削除される名前  |  新しい名前または優先される名  | 
| --- | --- | 
|  Aurora\_fwd\_master\_dml\_stmt\_duration  |  Aurora\_fwd\_writer\_dml\_stmt\_duration  | 
|  Aurora\_fwd\_master\_dml\_stmt\_count  |  Aurora\_fwd\_writer\_dml\_stmt\_count  | 
|  Aurora\_fwd\_master\_select\_stmt\_duration  |  Aurora\_fwd\_writer\_select\_stmt\_duration  | 
|  Aurora\_fwd\_master\_select\_stmt\_count  |  Aurora\_fwd\_writer\_select\_stmt\_count  | 
|  Aurora\_fwd\_master\_errors\_session\_timeout  |  Aurora\_fwd\_writer\_errors\_session\_timeout  | 
|  Aurora\_fwd\_master\_open\_sessions  |  Aurora\_fwd\_writer\_open\_sessions  | 
|  Aurora\_fwd\_master\_errors\_session\_limit  |  Aurora\_fwd\_writer\_errors\_session\_limit  | 
|  Aurora\_fwd\_master\_errors\_rpc\_timeout  |  Aurora\_fwd\_writer\_errors\_rpc\_timeout  | 

Aurora MySQL バージョン 3 では、次の設定パラメータに新しい名前が付けられました。

互換性のため、`mysql` クライアントのパラメータ値をチェックするには、Aurora MySQL バージョン 3 の初期のリリースでいずれかの名前を使用します。カスタムパラメータグループ内の値を変更する場合、新しい名前のみ使用できます。古いパラメータ名は、将来のリリースで削除される予定です。


|  削除される名前  |  新しい名前または優先される名  | 
| --- | --- | 
|  aurora\_fwd\_master\_idle\_timeout  |  aurora\_fwd\_writer\_idle\_timeout  | 
|  aurora\_fwd\_master\_max\_connections\_pct  |  aurora\_fwd\_writer\_max\_connections\_pct  | 
|  master\_verify\_checksum  |  source\_verify\_checksum  | 
|  sync\_master\_info  |  sync\_source\_info  | 
|  init\_slave  |  init\_replica  | 
|  rpl\_stop\_slave\_timeout  |  rpl\_stop\_replica\_timeout  | 
|  log\_slow\_slave\_statements  |  log\_slow\_replica\_statements  | 
|  slave\_max\_allowed\_packet  |  replica\_max\_allowed\_packet  | 
|  slave\_compressed\_protocol  |  replica\_compressed\_protocol  | 
|  slave\_exec\_mode  |  replica\_exec\_mode  | 
|  slave\_type\_conversions  |  replica\_type\_conversions  | 
|  slave\_sql\_verify\_checksum  |  replica\_sql\_verify\_checksum  | 
|  slave\_parallel\_type  |  replica\_parallel\_type  | 
|  slave\_preserve\_commit\_order  |  replica\_preserve\_commit\_order  | 
|  log\_slave\_updates  |  log\_replica\_updates  | 
|  slave\_allow\_batching  |  replica\_allow\_batching  | 
|  slave\_load\_tmpdir  |  replica\_load\_tmpdir  | 
|  slave\_net\_timeout  |  replica\_net\_timeout  | 
|  sql\_slave\_skip\_counter  |  sql\_replica\_skip\_counter  | 
|  slave\_skip\_errors  |  replica\_skip\_errors  | 
|  slave\_checkpoint\_period  |  replica\_checkpoint\_period  | 
|  slave\_checkpoint\_group  |  replica\_checkpoint\_group  | 
|  slave\_transaction\_retries  |  replica\_transaction\_retries  | 
|  slave\_parallel\_workers  |  replica\_parallel\_workers  | 
|  slave\_pending\_jobs\_size\_max  |  replica\_pending\_jobs\_size\_max  | 
|  pseudo\_slave\_mode  |  pseudo\_replica\_mode  | 

 Aurora MySQL バージョン 3 では、次のストアドプロシージャは新しい名前になっています。

 Aurora MySQL バージョン 3 の初期のリリースでは、互換性のためにいずれかの名前を使用できます。以前のプロシージャ名は、将来のリリースで削除される予定です。


|  削除される名前  |  新しい名前または優先される名  | 
| --- | --- | 
|  mysql.rds\_set\_master\_auto\_position  |  mysql.rds\_set\_source\_auto\_position  | 
|  mysql.rds\_set\_external\_master  |  mysql.rds\_set\_external\_source  | 
|  mysql.rds\_set\_external\_master\_with\_auto\_position  |  mysql.rds\_set\_external\_source\_with\_auto\_position  | 
|  mysql.rds\_reset\_external\_master  |  mysql.rds\_reset\_external\_source  | 
|  mysql.rds\_next\_master\_log  |  mysql.rds\_next\_source\_log  | 

## AUTO\_INCREMENT 値
<a name="AuroraMySQL.mysql80-autoincrement"></a>

 Aurora MySQL バージョン 3 では、各 DB インスタンスを再起動する際、Aurora は 各テーブルの `AUTO_INCREMENT` 値を保持します。Aurora MySQL バージョン 2 では、再起動後に `AUTO_INCREMENT` 値が保持されませんでした。

 スナップショットからの復元や、ポイントインタイムリカバリの実行、およびクラスターのクローン作成によって新しいクラスターを設定した場合、`AUTO_INCREMENT` 値は保持されません。この場合の `AUTO_INCREMENT` 値は、スナップショットが作成された時点のテーブル内の最大列値に基づいた値に初期化されます。この動作は、RDS for MySQL 8.0 では異なり、`AUTO_INCREMENT` 値はこれらのオペレーション中に保持されます。

## バイナリログレプリケーション
<a name="AuroraMySQL.mysql80-binlog"></a>

 MySQL 8.0 コミュニティエディションでは、バイナリログのレプリケーションがデフォルトで有効になっています。Aurora MySQL バージョン 3 では、バイナリログレプリケーションはデフォルトで無効になっています。

**ヒント**  
 Aurora 組み込みレプリケーション機能によって高可用性要件が満たされている場合は、バイナリログレプリケーションをオフにしておくことができます。これにより、バイナリログレプリケーションのパフォーマンスオーバーヘッドを回避できます。また、バイナリログレプリケーションの管理に必要な、関連するモニタリングおよびトラブルシューティングを回避することもできます。

 Aurora は MySQL 5.7 互換出典から Aurora MySQL バージョン 3 へのバイナリログレプリケーションをサポートしています。出典システムは、Aurora MySQL DB クラスター、RDS for MySQL DB インスタンス、またはオンプレミス MySQL インスタンスです。

 コミュニティ MySQL と同様に、Aurora MySQL は特定のバージョンを実行している出典から、同じメジャーバージョンまたは 1 つ以上のメジャーバージョンを実行するターゲットへのレプリケーションをサポートします。例えば、MySQL 5.6 互換システムから Aurora MySQL バージョン 3 へのレプリケーションはサポートされていません。Aurora MySQL バージョン 3 から MySQL 5.7 互換または MySQL 5.6 互換システムへのレプリケーションはサポートされていません。バイナリログのレプリケーションの詳細については、[Aurora と MySQL との間、または Aurora と別の Aurora DB クラスターとの間のレプリケーション (バイナリログレプリケーション)](AuroraMySQL.Replication.MySQL.md) を参照してください。

 Aurora MySQL バージョン 3 には、フィルタリングされたレプリケーションなど、コミュニティ MySQL 8.0 でのバイナリログレプリケーションの改善が含まれています。コミュニティ MySQL 8.0 の改善の詳細については、*MySQL リファレンスマニュアル*の[サーバーがレプリケーションフィルタ規則を評価する方法](https://dev.mysql.com/doc/refman/8.0/en/replication-rules.html)を参照してください。

### バイナリログレプリケーションのトランザクション圧縮
<a name="AuroraMySQL.binlog-transaction-compression"></a>

 バイナリログ圧縮の使用方法については、MySQL リファレンスマニュアルの[バイナリログトランザクションの圧縮](https://dev.mysql.com/doc/refman/8.0/en/binary-log-transaction-compression.html)を参照してください。

 Aurora MySQL バージョン 3 のバイナリログ圧縮には、次の制限が適用されます。
+  バイナリログデータが最大許容パケットサイズより大きいトランザクションは圧縮されません。これは、Aurora MySQL バイナリログ圧縮設定が有効になっているかどうかに関係ありません。このようなトランザクションは、圧縮されずに複製されます。
+  MySQL 8.0 をまだサポートしていない変更データキャプチャ (CDC) にコネクターを使用している場合、この特徴は使用できません。サードパーティーのコネクターをバイナリログ圧縮でしっかりテストした後に、バイナリログ圧縮を有効にすることをお勧めします。また、CDC の binlog レプリケーションを使用するシステムでバイナリログ圧縮を有効にすることをお勧めします。