🕵

Amazon Aurora MySQL v1(5.6 互換)→ v3(8.0 互換)移行を計画する(6)詳細調査について

2022/02/28に公開

これは

の続きです。

詳細調査用リポジトリについて

Zenn 記事を逐一追加していくのも冗長ですので、GitHub リポジトリで調査状況を公開することにしました。

https://github.com/hmatsu47/aurora_mysql1to3diff

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)に置換
    • DATE_ADD()DATE_SUB()の動作非互換
      • MySQL 8.0.28 で元の動作に
        • 将来の Aurora MySQL v3 で取り込まれる可能性が高い
    • 暗号関連の関数(DES など古いもの)が非推奨に
    • FOUND_ROWS()SQL_CALC_FOUND_ROWSが非推奨に
    • GREATEST()LEAST()の引数の型推測(キャスト)ルール変更
    • MASTERSOURCE読み替え(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 UPDATEUPDATE句のVALUES()が非推奨に
    • WAIT_UNTIL_SQL_THREAD_AFTER_GTIDが非推奨に
  • サーバ変数とオプション(パラメータ)

    • 厳密モードのデフォルト化とAUTO_INCREMENT値のロックモードの変更以外はそれほど気を付ける点はなさそう
    • デフォルトのパラメータグループから変える必要がある項目が減った印象
  • マニュアル全体の差分調査

    • ステートメントの非互換・構文解析の非互換・その他
      • 64 文字を超える外部キー制約名を持つテーブルは NG に
      • \NNULLのシノニムではなくなった
      • CHANGE MASTER TOCHANGE REPLICATION SOURCE TO
      • CHECK制約の有効化
        • 過去に無視された制約の定義が有効あるいはエラーに
      • Connector を対応バージョンに入れ替え
      • CREATE TABLE ... SELECTのトランザクションの扱いが変更(8.0.21)
        • 行ベースレプリケーションで 1 つのトランザクションとして記録
      • CREATE TEMPORARY TABLEでのTABLESPACE = {innodb_file_per_table | innodb_temporary}非推奨
      • DELAYED廃止(InnoDB では元から使えず)
      • EXPLAINEXTENDEDPARTITIONSキーワード削除(常に有効)
      • FLOATDECIMALDOUBLE型(シノニム含む)のUNSIGNED属性非推奨
      • FLOATDOUBLE型(シノニム含む)の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 SLAVERESET REPLICA
      • RIGHT JOINの実行結果が非互換の可能性(8.0.22)
        • 以前の結果が不正確な可能性あり
      • SELECT ... INTO ... FROMが非推奨に(8.0.22)
      • SELECTUNIONパーサールールの変更
        • ロック句を含む SELECTステートメントにはカッコが必要に
      • SHOW ENGINE INNODB MUTEX一旦廃止後再導入(仕様変更に注意)
      • SHOW GRANTSで(動的権限導入により)ALL PRIVILEGESが表示されなくなった
      • SHOW SLAVE STATUSSHOW 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 SLAVESTART REPLICA
      • TABLE ... UNION (TABLE)の挙動の変更
      • UNION DISTINCTUNION ALLの挙動の変更
      • UNIONの制限変更
      • utf8mb3が非推奨に
        • 現時点では MySQL 8.0 含めutf8utf8mb3のシノニム
      • utf8mb4のデフォルト照合順序がutf8mb4_0900_ai_ci
      • YEAR(2)型廃止・YEAR(4)非推奨→YEAR
      • アトミック DDL 導入によるレプリケーションの挙動変化
        • IF EXISTSが付かないDROP TABLEDROP VIEWのレプリケーション差異
      • クライアントの--ssl--ssl-verify-server-certオプションが削除
      • デフォルト認証が変わったことにより、Aurora MySQL v3 で新規ユーザを作成した場合に既存アプリケーションから接続できない可能性がある
        • CREATE USER時にmysql_native_passwordを指定する
      • プリペアドステートメント内のユーザー変数への参照のタイプの決定タイミング変更(8.0.22)
      • レプリケーション設定の不整合(ギャップ)にかかわる設定項目の変更(8.0.19)
      • 一時テーブルのROWMIXED形式バイナリログ記録の変更(5.7.25・8.0.4)
      • 管理者権限の分割(Aurora MySQL v1 → v3 変更点でもピックアップ)
      • 個々の ENUM または SET カラム要素の長さが 255 文字または 1020 バイトを超えるテーブルまたはストアドプロシージャは NG に
      • 数値データ型の桁数指定・ZEROFILL属性が非推奨に
      • 内部一時テーブルの変更(Aurora MySQL v1 → v3 変更点でもピックアップ)
      • 明示的に定義されたカラム名が 64 文字を超えるビューは NG に
      • 文字列データ型のBINARY属性が非推奨に

調査対象外


次回は実際の DB クラスタとインスタンスのパラメータ、テーブル、アプリケーションコード(SQL 文の記述)の確認です。

に続きます。

GitHubで編集を提案

Discussion