🕵
Amazon Aurora MySQL v1(5.6 互換)→ v3(8.0 互換)移行を計画する(6)詳細調査について
これは
の続きです。
詳細調査用リポジトリについて
Zenn 記事を逐一追加していくのも冗長ですので、GitHub リポジトリで調査状況を公開することにしました。
2022/3/11 現在、一通り完了しました。
-
- 計 30 個
-
- MySQL 8.0 で 64 ビットを超えるビット演算に対応したことによる非互換
-
&&・||(ORのシノニム)・!が非推奨に - GIS 関数の実装変更(5.6 → 5.7 → 8.0)
- 非互換の可能性
-
ST_・MBRが頭に付かないなどの古い名前の GIS 関数の削除 -
BINARYオペレータが非推奨に- MySQL 8.0.27 の変更点なので将来の Aurora MySQL v3 で取り込まれる可能性が高い
- 時刻関連の関数の変更(タイムスタンプの内部処理 64 ビット化)
- MySQL 8.0.28 の変更点なので将来の Aurora MySQL v3 で取り込まれる可能性が高い
-
CAST(... AS BINARY)に置換
-
- MySQL 8.0.28 の変更点なので将来の Aurora MySQL v3 で取り込まれる可能性が高い
-
DATE_ADD()・DATE_SUB()の動作非互換- MySQL 8.0.28 で元の動作に
- 将来の Aurora MySQL v3 で取り込まれる可能性が高い
- MySQL 8.0.28 で元の動作に
- 暗号関連の関数(DES など古いもの)が非推奨に
-
FOUND_ROWS()・SQL_CALC_FOUND_ROWSが非推奨に -
GREATEST()・LEAST()の引数の型推測(キャスト)ルール変更 -
MASTER→SOURCE読み替え(MySQL 8.0.26 からバックポート済み) -
MATCH()の動作非互換- MySQL 8.0.28 の変更点なので将来の Aurora MySQL v3 で取り込まれる可能性が高い
- 正規表現ライブラリ変更
- 非互換の可能性
-
OLD_PASSWORD()廃止(MySQL 5.7 で) -
IDENTIFIED BY PASSWORD()などパスワード関連の一部機能の廃止 -
PROCEDURE ANALYSE()廃止 -
ROUND()・TRUNCATE()戻り値の型決定方法の非互換 -
INSERT ... ON DUPLICATE KEY UPDATEでUPDATE句のVALUES()が非推奨に -
WAIT_UNTIL_SQL_THREAD_AFTER_GTIDが非推奨に
-
- 厳密モードのデフォルト化と
AUTO_INCREMENT値のロックモードの変更以外はそれほど気を付ける点はなさそう - デフォルトのパラメータグループから変える必要がある項目が減った印象
- 厳密モードのデフォルト化と
-
マニュアル全体の差分調査
- ステートメントの非互換・構文解析の非互換・その他
- 64 文字を超える外部キー制約名を持つテーブルは NG に
-
\NはNULLのシノニムではなくなった -
CHANGE MASTER TO→CHANGE REPLICATION SOURCE TO -
CHECK制約の有効化- 過去に無視された制約の定義が有効あるいはエラーに
- Connector を対応バージョンに入れ替え
-
CREATE TABLE ... SELECTのトランザクションの扱いが変更(8.0.21)- 行ベースレプリケーションで 1 つのトランザクションとして記録
-
CREATE TEMPORARY TABLEでのTABLESPACE = {innodb_file_per_table | innodb_temporary}非推奨 -
DELAYED廃止(InnoDB では元から使えず) -
EXPLAINのEXTENDED・PARTITIONSキーワード削除(常に有効) -
FLOAT・DECIMAL・DOUBLE型(シノニム含む)のUNSIGNED属性非推奨 -
FLOAT・DOUBLE型(シノニム含む)のAUTO_INCREMENT非推奨 -
FLOAT(M,D)・DOUBLE(M,D)(シノニム含む)非推奨 -
FLUSH HOSTSが非推奨に(8.0.23) -
GRANTで暗黙のユーザ作成およびユーザ属性のみの変更を廃止 -
GRANT操作の読み取りロックの変更(8.0.22) -
GROUP BY ASC/DESC廃止(8.0.13)- グループ化関数を使用した
ORDER BYサポート(8.0.12)
- グループ化関数を使用した
- GTID レプリケーションの非互換
-
KEYパーティショニングのカラムインデックス接頭辞が非推奨に(8.0.21) -
LOCK TABLES ... WRITEによる明示的テーブルロック時のinnodb_table_locks=0無効化 -
ORDER BY 【列番号】・カッコで囲まれたクエリー式内で発生し外部クエリーにも適用されるORDER BY(動作不定)が非推奨に -
RESET SLAVE→RESET REPLICA -
RIGHT JOINの実行結果が非互換の可能性(8.0.22)- 以前の結果が不正確な可能性あり
-
SELECT ... INTO ... FROMが非推奨に(8.0.22) -
SELECT・UNIONパーサールールの変更- ロック句を含む
SELECTステートメントにはカッコが必要に
- ロック句を含む
-
SHOW ENGINE INNODB MUTEX一旦廃止後再導入(仕様変更に注意) -
SHOW GRANTSで(動的権限導入により)ALL PRIVILEGESが表示されなくなった -
SHOW SLAVE STATUS→SHOW REPLICA STATUS - SQL モードの非推奨・削除
-
ERROR_FOR_DIVISION_BY_ZERO,PAD_CHAR_TO_FULL_LENGTH(非推奨) -
DB2,MAXDB,MSSQL,MYSQL323,MYSQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_AUTO_CREATE_USER(削除)
-
-
START SLAVE→START REPLICA -
TABLE ... UNION (TABLE)の挙動の変更 -
UNION DISTINCT・UNION ALLの挙動の変更 -
UNIONの制限変更 -
utf8mb3が非推奨に- 現時点では MySQL 8.0 含め
utf8はutf8mb3のシノニム
- 現時点では MySQL 8.0 含め
-
utf8mb4のデフォルト照合順序がutf8mb4_0900_ai_ciへ -
YEAR(2)型廃止・YEAR(4)非推奨→YEARへ - アトミック DDL 導入によるレプリケーションの挙動変化
-
IF EXISTSが付かないDROP TABLE・DROP VIEWのレプリケーション差異
-
- クライアントの
--ssl・--ssl-verify-server-certオプションが削除 - デフォルト認証が変わったことにより、Aurora MySQL v3 で新規ユーザを作成した場合に既存アプリケーションから接続できない可能性がある
-
CREATE USER時にmysql_native_passwordを指定する
-
- プリペアドステートメント内のユーザー変数への参照のタイプの決定タイミング変更(8.0.22)
- レプリケーション設定の不整合(ギャップ)にかかわる設定項目の変更(8.0.19)
- 一時テーブルの
ROW・MIXED形式バイナリログ記録の変更(5.7.25・8.0.4) - 管理者権限の分割(Aurora MySQL v1 → v3 変更点でもピックアップ)
- 個々の ENUM または SET カラム要素の長さが 255 文字または 1020 バイトを超えるテーブルまたはストアドプロシージャは NG に
- 数値データ型の桁数指定・
ZEROFILL属性が非推奨に - 内部一時テーブルの変更(Aurora MySQL v1 → v3 変更点でもピックアップ)
- 明示的に定義されたカラム名が 64 文字を超えるビューは NG に
- 文字列データ型の
BINARY属性が非推奨に
- ステートメントの非互換・構文解析の非互換・その他
調査対象外
-
INFORMATION_SCHEMA・パフォーマンススキーマ・sysスキーマの各テーブル・ビュー
次回は実際の DB クラスタとインスタンスのパラメータ、テーブル、アプリケーションコード(SQL 文の記述)の確認です。
に続きます。
Discussion