ForgeVision Engineer Blog

フォージビジョン エンジニア ブログ

【EOL間近】Amazon RDS for MySQL 5.7の標準サポート終了とバージョンアップ前の影響確認について


こんにちは。フォージビジョンの藤川と申します。

2023年9月初めに、AWSよりAmazon RDS for MySQL 5.7の標準サポート終了に関する内容と延長サポートに関する内容の通知がありました。以下は、2023/9/13時点のAWS公式サイトの情報です。

メール本文にも記載がありましたが、各々の情報は以下のAWS公式サイトに記載があります。

  • Amazon RDS for MySQL 5.7の標準サポート終了
    • 2023/9/13時点では、表示言語を英語にすることで、標準サポート終了日の最新の情報や延長サポートの内容を確認することができました。

docs.aws.amazon.com

  • Amazon AuroraとAmazon RDSがMySQLとPostgreSQLデータベースの延長サポートを発表

aws.amazon.com

データベースのメジャーバージョンのアップデートについては、マイナーバージョンアップと比較して影響が大きいことを想定しておりましたが、AWS側でも標準サポート終了日が2023年10月→2023年12月→2024年2月と延長されているのと同時に2024年2月以降もAmazon RDS for MySQL 5.7が継続して利用できるように延長サポートについても発表がされており、MySQLのメジャーバージョンアップへの影響の大きさが伺えるかと思います。

このため、MySQL 5.7から MySQL 8.0へのバージョンアップへの影響とバージョンアップ前の事前チェックツールについて記載させていただきたいと思います。

概要

本記事では、

  1. MySQL 5.0について
  2. MySQLのライフサイクル
  3. バージョンアップすべきかどうかについて
  4. Amazon RDS for MySQL 5.7 の延長サポートについて
  5. MySQL 5.7からMySQL 8.0へのバージョンアップへの影響
  6. バージョンアップ前の事前チェックツール

について、記載させていただきたいと思います。

参考資料

本記事は、 オラクル社より提供されている以下の動画(60分程度)を参考に執筆しております。詳細をご確認されたい方は、以下の動画も併せてご確認いただければと思います。

videohub.oracle.com

1. MySQL 5.0について

MySQLは1995年に最初のバージョンがリリースされ、MySQL 5.0については、2005年にリリースされました。 その後、2008年にサン・マイクロシステムズ社に買収され、2010年にオラクル社がサン・マイクロシステムズ社を買収したことにより、MySQLは現在オラクル社の製品となっています。

MySQLのメジャーバージョン5については20年弱の歴史があることから、頭を悩ませておられるユーザー様も多くいらっしゃるかと思います。

2. MySQLのライフサイクル

オラクル社では、Oracle Lifetime Support for MySQLとしてGAから最長8年間のバグ修正、パッチ、アップデートを提供しています。

3. バージョンアップすべきかどうかについて

3.1 バージョンアップを実施しない場合の影響

オラクル社ではバージョンアップを行わない場合に発生し得る問題として、下図の内容を挙げています。

AWS側からも標準サポート期間が設けられているため、いずれはバージョンアップしなければならない状況となることが想定されます。また、バージョン差が大きいほど、現行バージョンとの変更点の数が多くなることが想定されますので、難易度は高くなる一方かと思います。このため、作業工数や費用がかかったとしても、こまめにバージョンアップを実施することが望ましいと考えます。

3.2 現行のシステムをもう少しだけ継続したい

次期システムは開発中である場合や別システムに乗り換えを検討されており、もう少しだけMySQL 5.7を継続したいというご要望もあるかと思います。この場合、Amazon AuroraとAmazon RDSがMySQLとPostgreSQLデータベースの延長サポートを利用することができます。

4. Amazon RDS for MySQL 5.7 の延長サポートについて

Amazon RDS for MySQL5.7の延長サポートを使用すると、オラクル社のサポート終了後もMySQLメジャー バージョンを引き続き使用できます。この間、AWSはパッチリリースを通じて重大なセキュリティ問題とバグの修正を最大3年間提供します。また、延長サポート費用は、インスタンスタイプ単位ではなく、リージョン単位で料金が設定されています。

Amazon RDS for MySQL5.7の延長サポート費用は、以下のAWS公式サイトをご確認ください。
aws.amazon.com

  • 2023/9/13時点では、表示言語を英語にすることで、Amazon RDS for MySQL5.7の延長サポートの費用を確認することができました。

Amazon RDS for MySQL5.7の延長サポートには、Amazon RDSの利用料金とは別に延長サポート費用が発生します。 Amazon RDS for MySQLでプロビジョニングされたインスタンスの場合、Amazon RDS for MySQL 5.7の延長サポートは、時間あたりのvCPUごとに料金が設定されます。

インスタンスタイプごとのvCPU数は、以下のAWS公式サイトをご確認ください。 aws.amazon.com

4.1 Amazon RDS for MySQL5.7の延長サポートの計算方法

(1)利用状況

以下のように、Amazon RDS for MySQL 5.7を利用していたとします。

  • 延長サポート期間:1年目
  • リージョン:東京リージョン
  • RDSのインスタンスタイプ:db.m5.xlarge

(2)必要な情報の収集

MySQL5.7の延長サポート費用をAWS公式サイトから確認します。この度は、東京リージョンで利用しており、延長サポート1年目なので、vCPU時間あたり$0.120の費用が発生します。

aws.amazon.com

延長サポートを適用するRDSのvCPU数を確認します。vCPU数をAWS公式サイトから確認します。この度は、db.m5.xlargeを利用していますので、vCPU数は4つとなります。

aws.amazon.com

(3)MySQL5.7の延長サポート費用の算出

vCPU数/時間あたり$0.120の費用が発生し、vCPU数は4つですので、以下となります。
※ 日本円の算出は、$1.00 = 147円(2023/9/13時点)で算出しています。

<1時間あたりの費用>

MySQL5.7の延長サポート費用/時間 = $0.120/vCPU数 × vCPU 4つ = $0.480/時間
= およそ70円/時間

<1ヶ月(720時間(※ 1ヶ月を30日として算出))あたりの費用>

MySQL5.7の延長サポート費用/月 = $0.480/時間 × 720時間 = $345.6/月
= およそ50,803円/月

<1年間あたりの費用>

MySQL5.7の延長サポート費用/年 = $345.6/月 × 12ヶ月 = $4147.2/年
= およそ609,638円/年 = およそ 61万円/年

5. MySQL 5.7からMySQL 8.0へのバージョンアップへの影響

バージョンアップを実施する際には、以下の事前準備を実施することで、バージョンアップ後の想定外の問題が発生するリスクを軽減することができます。ここでは、バージョン間の差異確認について詳しく見ていきたいと思います。

5.1 バージョン間の差異確認の確認観点

MySQLのバージョン間の差異を確認する観点としては、以下があるとのことです。

  • マニュアルからバージョン間の差異を確認する
  • リリースノートから差異を確認する
  • パラメータの差異を確認する
  • 予約後、関数の差異を確認する

5.1.1 マニュアルからバージョン間の差異を確認する

下記のMySQLサイトのマニュアルを確認して、変更点を全て確認するのが一番良いですが、全てを確認し切れない場合には、少なくとも、

  • Known issue(既知の問題)

  • Incompatible change(互換性が失われる変更)

について、注視するようにした方が良いとのことです。

dev.mysql.com

5.1.1.1 Known issue(既知の問題)

【構成の変更】
  • デフォルトの文字セットがlatin1からutf8mb4に変更されました。次のシステム変数が影響を受けます。

5.1.1.2 Incompatible change(互換性が失われる変更)

【構成の変更】
  • MySQLストレージ エンジンは、独自のパーティショニングハンドラーを提供する責任を負い、MySQLサーバーは汎用パーティショニングサポートを提供しなくなりました。
  • MySQL 8.0.11以降、サーバーの初期化時に使用された設定とは異なるlower_case_table_names設定でサーバーを起動することは禁止されています。
【InnoDBの変更】
  • MySQL 8.0.17以降、CREATE TABLESPACE ... ADD DATAFILE句では、循環ディレクトリ参照が許可されません。
【SQLの変更】
  • MySQL 8.0.13以降、GROUP BY句の非推奨のASCまたはDESC修飾子は削除されました。
  • MySQL 8.0以降、InnoDBでは生成された名前の代わりにFOREIGN KEY のindex_name値が使用されます。
【InnoDBのデフォルト】
  • innodb_undo_tablespacesシステム変数のデフォルト値が0から2に変更されました。
  • innodb_autoinc_lock_modeシステム変数のデフォルト値が1(連続)から2(インターリーブ)に変更されました。

5.1.2 リリースノートから差異を確認する

下記のMySQLサイトのバージョン間のリリースノートを全て確認して、変更点を全て確認するのが一番良いですが、全てを確認し切れない場合には、少なくとも、

  • Incompatible change(互換性が失われる変更)

について、注視するようにした方が良いとのことです。

dev.mysql.com

dev.mysql.com

ここでは、MySQL 5.7.43(最新版)まで更新されていると仮定し、MySQL 8.0.0〜8.0.34(最新版)までのリリースノートを確認したいと思います。

MySQL 8.0.0のリリースノート

【アカウント管理】
  • mysqlシステム データベースの許可テーブルは、MyISAM(非トランザクション)テーブルからInnoDB(トランザクション)テーブルに変更になりました。
【設定】
  • MySQL 8.0以降、innodb_read_onlyシステム変数を有効にすると、InnoDBストレージに対してのみテーブルの作成と削除ができなくなりました。
【データディクショナリ】
  • MySQL Serverには、トランザクションテーブル内のデータベースオブジェクトに関する情報を含むグローバルデータディクショナリが組み込まれるようになりました。
【構文解析】
  • SELECTとUNIONのパーサールールは、より一貫性が高く(同じSELECT構文が各コンテキストに均一に適用され)、重複を減らすためにリファクタリングされました。
【パフォーマンススキーマ】
  • パフォーマンススキーマはサーバーエラー(および警告)を計測し、それらに関する統計情報を一連の概要テーブルを通じて公開するようになりました。
【追加または変更された機能】
  • 汎用パーティショニングハンドラーはMySQLサーバーから削除されました。この変更の一環として、mysqldは--partitionおよび--skip-partitionオプションをサポートしなくなり、-DWITH_PARTITION_STORAGE_ENGINEを使用してサーバーを構築できなくなりました。また、パーティションはSHOW PLUGINSの出力にも表示されなくなり、INFORMATION_SCHEMA.PLUGINSテーブルにも表示されなくなりました。
【バグ修正】
  • 空間値の連結はほとんど意味がないため、CONCAT()関数とCONCAT_WS()関数は空間引数に対してエラーを生成するようになりました。

MySQL 8.0.1のリリースノート

【アカウント管理】
  • コンポーネントとプラグインは、権限を動的に(実行時に)定義できるようになり、実装する機能に特に関連付けられた権限を作成できるようになりました。
【編集】
  • my_boolタイプはMySQLソースコードでは使用されなくなりました。
【非推奨と削除】
  • ALTER TABLE ... UPGRADE PARTITIONINGステートメントはサポートされなくなりました。
【セキュリティ】
  • STANDALONEおよびWINビルドの場合、デフォルトのsecure_file_priv値が空の文字列からNULLに変更されました。
  • mysqld_safeに対して次の変更が加えられました。Unixソケットファイルのディレクトリが見つからない場合、そのディレクトリは作成されなくなります。
【空間データのサポート】
  • ST_Distance()はデカルト空間参照系(SRS)のみをサポートしていましたが、ST_Distance()は、地理SRS内のジオメトリ引数を検出し、楕円体上の測地距離をメートル単位で返すようになりました。
  • 複数の関数について、以前はWKB文字列またはジオメトリ引数を受け入れていましたが、ジオメトリ引数は許可されなくなり、エラーが発生します。
  • 複数の関数について、空間参照系で指定された順序で緯度と経度の座標を解釈するようになりました。
  • 複数の関数について、ジオメトリ値の引数に適用される空間参照系で指定された順序で緯度と経度の座標を返すようになりました。
【追加または変更された機能】
  • UPDATEがSELECT列を参照するINSERT ... SELECT ... ON DUPLICATE KEY UPDATEステートメントでは、SELECTがUNIONの場合、結果が不正になる可能性がありましたが、現在、そのようなステートメントは禁止されており、エラーが発生します。
【バグ修正】
  • 明示的な列名のリストが提供されたビューの保存された定義が無効である可能性があります。

MySQL 8.0.2のリリースノート

【ログ】
  • システムログへのログ記録を有効にするには、log_sink_syseventlogログコンポーネントをロードし、それをlog_error_services値にリストする必要があります。
【プラグイン】
  • Group ReplicationやX Pluginなどのプラグインは、このリリースで追加されたmysql.sessionアカウントを使用するようになりました。mysql.sessionアカウントが含まれていない以前のリリースからアップグレードする場合は、mysql_upgradeを実行してアカウントが作成されていることを確認する必要があります。
【追加または変更された機能】
  • ADD PARTITION、DROP PARTITION、COALESCE PARTITION、REORGANIZE PARTITION、およびREBUILD PARTITION ALTER TABLEオプションがネイティブパーティショニングインプレースAPIでサポートされるようになり、ALGORITHM={COPY|INPLACE}句およびLOCK句とともに使用できるようになりました。

MySQL 8.0.3のリリースノート

【空間データのサポート】
  • 複数の関数ついて、地理的SRS内のジオメトリ引数を検出し、地理的結果を返すようになりました。
【バグ修正】
  • JSONオブジェクトに同じキー名の複数のメンバーが含まれている場合、MySQLは最初のメンバーを保持し、残りを破棄しました。

MySQL 8.0.4のリリースノート

【SQL関数と演算子の注意事項】
  • MySQLは正規表現演算子(REGEXP、RLIKE)をサポートするためにHenry Spencer正規表現ライブラリを使用していましたが、正規表現のサポートは、Unicodeの完全なサポートを提供し、マルチバイトセーフであるInternational Components for Unicode(ICU)を使用して再実装されました。
【セキュリティ】
  • caching_sha2_passwordおよびsha256_password認証プラグイン、およびold_passwords=2の場合のPASSWORD()関数のパスワードが最大256文字に制限されるようになりました。また、パスワードハッシュ ラウンドの数は、使用されるCPU時間を制限するために制限されています。
  • caching_sha2_passwordおよびsha256_password認証プラグインは、mysql_native_passwordプラグインよりも安全なパスワード暗号化を提供し、caching_sha2_passwordはsha256_passwordよりも優れたパフォーマンスを提供します。
【空間データのサポート】
  • 複数の空間インポート関数について、座標が有効な値の範囲外にある地理空間参照系のデータに対してエラーを返すようになりました。
  • いくつかの空間関数はジオメトリ引数の空間参照系(SRS)を無視し、結果をデカルト平面上で計算していましたが、地理的SRSを指定するジオメトリ引数の計算がサポートされるようになりました。
  • SRID引数を取る次の空間関数では、SRIDが存在しない場合にエラーが返されるようになりました。

MySQL 8.0.11のリリースノート

【非推奨および削除に関する注意事項】
  • DB2、MAXDB、MSSQL、MYSQL323、MYSQL40、ORACLE、POSTGRESQL、NO_FIELD_OPTIONS、NO_KEY_OPTIONS、NO_TABLE_OPTIONSの非推奨の互換性SQLモードは削除されました。
【空間データのサポート】
  • 優先データ型名の変更の結果、データ型情報を表示する一部のINFORMATION_SCHEMAテーブル、SHOW CREATE TABLEなどのステートメント、およびST_GeometryType()関数では、GEOMETRYCOLLECTIONではなくGEOMCOLLECTIONが表示されるようになりました。

MySQL 8.0.12のリリースノート

【空間データのサポート】
  • 新しい空間関数ST_Longitude()とST_Latitude()は、それぞれPoint引数の経度または緯度を返します。2番目の引数を指定して呼び出された場合、これらの関数はその引数を使用して、Point引数の経度または緯度をそれぞれ設定します。さらに、ST_X()関数とST_Y()関数は、空間参照系定義(SRS)に従ってPoint引数を解釈するようになりました。

MySQL 8.0.13のリリースノート

【ログ】
  • 以前にシステムログ(Windowsのイベントログ、UnixおよびUnix類似システムのsyslog)へのエラーログを構成するシステム変数が削除されましたが、必要に応じて、削除されたシステム変数は、log_sink_syseventlogエラーログコンポーネントによって管理される新しいシステム変数に置き換えられました。
【空間データのサポート】
  • ST_Area()はデカルト空間参照系(SRS)を持つジオメトリ引数のみをサポートしており、地理的SRSを指定するジオメトリ引数を指定して呼び出すとエラーが発生していましたが、ST_Area()は、地理的SRSを持つジオメトリ引数をサポートし、測地面積を平方メートルで返します。
【SQL構文に関する注意事項】
  • GROUP BY句の非推奨のASCまたはDESC修飾子は削除されました。以前にGROUP BYソートに依存していたクエリは、以前のMySQLバージョンとは異なる結果を生成する可能性があります。特定の並べ替え順序を生成するには、ORDER BY句を指定します。

MySQL 8.0.16のリリースノート

【SQL構文に関する注意事項】
  • MySQL 5.7では、CONSTRAINTシンボル句を使用せずにInnoDBテーブルのFOREIGN KEY定義を指定するか、シンボルを使用せずにCONSTRAINTキーワードを指定すると、InnoDBは生成された制約名を使用します。この動作はMySQL 8.0で変更され、InnoDBでは生成された名前の代わりにFOREIGN KEのindex_name値が使用されます。制約名はスキーマ(データベース)ごとに一意である必要があるため、この変更により、スキーマごとに一意ではない外部キーインデックス名によりエラーが発生しました。このようなエラーを回避するために、新しい制約の命名動作が元に戻され、InnoDBは生成された制約名を再度使用します。

MySQL 8.0.18のリリースノート

【編集】 - my_ulonglongタイプはMySQLソースコードでは使用されなくなりました。この型を使用するサードパーティコードでは、代わりにuint64_t C型を使用する必要があります。また、my_ulonglong変数の出力にprintf()フォーマット文字列を使用する場合、調整が必要になる可能性があります。

MySQL 8.0.20のリリースノート

【バグ修正】
  • ST_Contains()を使用する一部のクエリでは、0より大きい値が追加されない限り、結果が返されませんでした。

MySQL 8.0.21のリリースノート

【セキュリティ】
  • INFORMATION_SCHEMA.FILESテーブルにアクセスするには、PROCESS権限が必要になりました。この変更は、FILESテーブル内のテーブルスペース情報にアクセスするmysqldumpコマンドのユーザーに影響するため、PROCESS権限も必要になります。

MySQL 8.0.24のリリースノート

【パフォーマンス】
  • パフォーマンススキーマのsetup_instrumentsテーブルのインストルメンテーションが改訂されました。

MySQL 8.0.26のリリースノート

【追加または変更された機能】
  • MySQL 8.0.26以降、「マスター」という用語を含む残りのほとんどの識別子に対して新しいエイリアスまたは置換名が提供され、「ソース」に変更されました。「スレーブ」は「レプリカ」に変更されます。「mts」(「マルチスレッドスレーブ」の略)は、「mta」(「マルチスレッドアプライヤ」の略)に変更されます。新しい名前を使用するために、必要に応じてヘルプテキストも変更されます。
【バグ修正】
  • トリガー本体内で、代入ターゲットとしてOLDまたはNEW値を使用するSET句を含むINSERTまたはUPDATEステートメントは、アサーションを生成したり、サーバー終了につながる可能性があります。 このような割り当ては今後許可されなくなります。

MySQL 8.0.27のリリースノート

【バグ修正】
  • ビュー上の各SELECTステートメントのクエリダイジェストは、ビュー定義ではなくSELECTに基づくようになりました。これにより、events_statements_summary_by_digestテーブル内の個別のSELECTステートメントを区別できるようになります。ただし、クエリダイジェストを使用するツールでは、この変更を考慮して調整が必要になる場合があります。

MySQL 8.0.28のリリースノート

【文字セット】
  • CONVERT(string USING charset)は、戻り値の正しい最大長を計算しませんでした。これは、CAST(string AS charset)で計算されたものと同じである必要があります。アップグレードする前に、以前のCONVERT()動作に依存する可能性のあるアプリケーションをチェックし、必要に応じて更新する必要があります。

MySQL 8.0.31のリリースノート

【バグ修正】
  • MySQL 8.0.14以降非推奨となったサービスpfs_plugin_tableは、このリリースでは削除されました。このサービスを使用するプラグインまたはコンポーネントは、代わりにpfs_plugin_table_v1およびpfs_plugin_column_*を使用するように更新する必要があります。

5.1.3 パラメータの差異を確認する

バージョンアップにより追加/廃止になったパラメータ、またデフォルト値が変更になったパラメータが存在します。旧環境、新環境で各パラメータに設定される値を比較し、差異を確認する必要があるとのことです。

dev.mysql.com

下表では、MySQL 5.7.43(最新版)まで更新されていると仮定し、MySQL 8.0.0〜8.0.34(最新版)までのパラメータに関する更新情報(導入/非推奨を除く)を記載したいと思います。

パラメータ 変更内容
basedir パラメータ変更(8.0.2):デフォルトは mysqld インストールディレクトリの親
character_set_client パラメータ変更(8.0.1):デフォルトはutf8mb4
character_set_connection パラメータ変更(8.0.1):デフォルトはutf8mb4
character_set_database パラメータ変更(8.0.1):デフォルトはutf8mb4
character_set_results パラメータ変更(8.0.1):デフォルトはutf8mb4
character_set_server パラメータ変更(8.0.1):デフォルトはutf8mb4
character_set_system パラメータ変更(8.0.1):デフォルトはutf8mb3
collation_database パラメータ変更(8.0.1):デフォルトはutf8mb4_0900_ai_ci
collation_server バパラメータ変更(8.0.1):デフォルトはutf8mb4_0900_ai_ci
Compression パラメータ変更(8.0.34):デフォルトは 8192、最小値は 0、最大値は 536870912
date_format 廃止(8.0.3)
datetime_format 廃止(8.0.3)
default_authentication_plugin パラメータ変更(8.0.3):デフォルトはmysql_native_passwordです
バージョン 8.0.4 での値パラメータ変更:デフォルトはcaching_sha2_password
des-key-file 廃止(8.0.3)
event_scheduler パラメータ変更(8.0.3):デフォルトはオン
expire_logs_days パラメータ変更(8.0.2):デフォルトは 30、最小値は 0、最大値は 99
パラメータ変更(8.0.11):デフォルトは 0、最小値は 0、最大値は 99
explicit_defaults_for_timestamp パラメータ変更(8.0.2):デフォルトはオン
group_replication_allow_local_disjoint_gtids_join 廃止(8.0.4)
group_replication_components_stop_timeout パラメータ変更(8.0.27):デフォルトは 300、最小値は 2、最大値は 31536000
gtid_executed_compression_period パラメータ変更(8.0.23):デフォルトは 0、最小値は 0、最大値は 4294967295
have_crypt 廃止(8.0.3)
ignore_builtin_innodb 廃止(8.0.3)
innodb_autoinc_lock_mode パラメータ変更(8.0.3):デフォルトは 2 で、最小値は指定されておらず、最大値も指定されていません
Innodb_available_undo_logs 廃止(8.0.2)
innodb_doublewrite パラメータ変更(8.0.30):デフォルトはオン
innodb_flush_neighbors パラメータ変更(8.0.3):デフォルトは0
innodb_log_file_size 廃止(8.0.30)
innodb_log_files_in_group 廃止(8.0.30)
innodb_max_dirty_pages_pct パラメータ変更(8.0.3):デフォルトは 90、最小値は 0、最大値は 99.99
innodb_max_dirty_pages_pct_lwm パラメータ変更(8.0.3):デフォルトは 10、最小値は 0、最大値は 99.99
innodb_spin_wait_delay パラメータ変更(8.0.14):デフォルトは 6、最小値は 0、最大値は 1000
innodb_undo_log_truncate パラメータ変更(8.0.2):デフォルトはオン
innodb_undo_logs 廃止(8.0.2)
innodb_undo_tablespaces パラメータ変更(8.0.2):デフォルトは 2、最小値は 0、最大値は 127
パラメータ変更(8.0.3):デフォルトは 2、最小値は 2、最大値は 127
internal_tmp_disk_storage_engine 廃止(8.0.16)
local_infile パラメータ変更(8.0.2):デフォルトはオフ
log_builtin_as_identified_by_password 廃止(8.0.11)
log_error_verbosit パラメータ変更(8.0.4):デフォルトは 2、最小値は 1、最大値は 3
log_slave_updates パラメータ変更(8.0.3):デフォルトはオン
log_syslog 廃止(8.0.13)
パラメータ変更(8.0.2):デフォルトは ON (システムログへのエラーログが有効な場合)
log_syslog_facility 廃止(8.0.13)
log_syslog_include_pid 廃止(8.0.13)
log_syslog_tag 廃止(8.0.13)
log-warnings 廃止(8.0.13)
master_info_repository パラメータ変更(8.0.2):デフォルトはテーブル
max_allowed_packet パラメータ変更(8.0.3):デフォルトは 67108864、最小値は 1024、最大値は 1073741824
max_error_count パラメータ変更(8.0.3):デフォルトは 1024、最小値は 0、最大値は 65535
max_length_for_sort_data パラメータ変更(8.0.1):デフォルトは 4096、最小値は 4、最大値は 8388608
max_prepared_stmt_count パラメータ変更(8.0.18):デフォルトは 16382、最小値は 0、最大値は 4194304
max_tmp_tables 廃止(8.0.13)
metadata_locks_cache_size 廃止(8.0.13)
metadata_locks_hash_instances 廃止(8.0.13)
multi_range_count 廃止(8.0.13)
myisam_repair_threads 廃止(8.0.30)
ndb_autoincrement_prefetch_sz パラメータ変更(8.0.19-ndb-8.0.19):デフォルトは 512、最小値は 1、最大値は 65536
ndb-batch-size パラメータ変更(8.0.29-ndb-8.0.29 ):デフォルトは 32768、最小値は 0、最大値は 2147483648
ndb_cache_check_time 廃止(8.0.1)
ndb_eventbuffer_max_alloc パラメータ変更(8.0.26-ndb-8.0.26):デフォルトは 0、最小値は 0、最大値は 9223372036854775807
ndb_log_bin パラメータ変更(8.0.16-ndb-8.0.16):デフォルトはオフ
ndb_read_backup パラメータ変更(8.0.19-ndb-8.0.19):デフォルトはオン
ndb-wait-connected パラメータ変更(8.0.27-ndb-8.0.27 ):デフォルトは 120、最小値は 0、最大値は 31536000
ndb-wait-setup パラメータ変更(8.0.27-ndb-8.0.27 ):デフォルトは 120、最小値は 0、最大値は 31536000
ndbcluster パラメータ変更(8.0.13-ndb-8.0.13):デフォルトはオン
old_passwords 廃止(8.0.11)
old-style-user-limits 廃止(8.0.30)
optimizer_switch パラメータ変更(8.0.3):デフォルトは指定されていません
optimizer_trace_max_mem_size パラメータ変更(8.0.4):デフォルトは 1048576、最小値は 0、最大値は 4294967295
performance_schema_max_cond_classes パラメータ変更(8.0.12):デフォルトは 80、最小値は 0、最大値は 1024
パラメータ変更(8.0.13):デフォルトは 100、最小値は 0、最大値は 1024
パラメータ変更(8.0.27):デフォルトは 150、最小値は 0、最大値は 1024
performance_schema_max_file_classes パラメータ変更(8.0.12):デフォルトは 80、最小値は 0、最大値は 1024
performance_schema_max_memory_classes パラメータ変更(8.0.1):デフォルトは 450、最小値は 0、最大値は 1024
performance_schema_max_mutex_classes パラメータ変更(8.0.1):デフォルトは 220、最小値は 0、最大値は 256
パラメータ変更(8.0.3):デフォルトは 250、最小値は 0、最大値は 256
パラメータ変更(8.0.12):デフォルトは 300、最小値は 0、最大値は 1024
パラメータ変更(8.0.27):デフォルトは 350、最小値は 0、最大値は 1024
performance_schema_max_rwlock_classes パラメータ変更(8.0.3):デフォルトは 60、最小値は 0、最大値は 256
パラメータ変更(8.0.12):デフォルトは 60、最小値は 0、最大値は 1024
performance_schema_max_socket_classes パラメータ変更(8.0.12):デフォルトは 10、最小値は 0、最大値は 1024
performance_schema_max_stage_classes パラメータ変更(8.0.12):デフォルトは 150、最小値は 0、最大値は 1024
パラメータ変更(8.0.13):デフォルトは 175、最小値は 0、最大値は 1024
performance_schema_max_thread_classes パラメータ変更(8.0.3):デフォルトは 100、最小値は 0、最大値は 256
パラメータ変更(8.0.12):デフォルトは 100、最小値は 0、最大値は 1024
Qcache_free_blocks 廃止(8.0.3)
Qcache_free_memory 廃止(8.0.3)
Qcache_hits 廃止(8.0.3)
Qcache_inserts 廃止(8.0.3)
Qcache_lowmem_prunes 廃止(8.0.3)
Qcache_not_cached 廃止(8.0.3)
Qcache_queries_in_cache 廃止(8.0.3)
Qcache_total_blocks 廃止(8.0.3)
query_cache_limit 廃止(8.0.3)
query_cache_min_res_unit 廃止(8.0.3)
query_cache_size 廃止(8.0.3)
パラメータ変更(8.0.1 (bitsize=64)):デフォルトは 0、最小値は 0、最大値は 18446744073709551615
パラメータ変更(8.0.1(bitsize=32)):デフォルトは 0、最小値は 0、最大値は 4294967295
query_cache_type 廃止(8.0.3)
query_cache_wlock_invalidate 廃止(8.0.3)
secure_auth 廃止(8.0.3)
server_id パラメータ変更(8.0.3):デフォルトは 1、最小値は 0、最大値は 4294967295
show_compatibility_56 廃止(8.0.1)
skip-host-cache 廃止(8.0.30)
slave_allow_batching パラメータ変更(8.0.30-ndb-8.0.30):デフォルトはオン
Slave_heartbeat_period 廃止(8.0.1)
Slave_last_heartbeat 廃止(8.0.1)
slave_parallel_type パラメータ変更(8.0.27):デフォルトは LOGICAL_CLOCK
slave_parallel_workers パラメータ変更(8.0.27):デフォルトは 4、最小値は 0、最大値は 1024
slave_pending_jobs_size_max パラメータ変更(8.0.12):デフォルトは 128M、最小値は 1024、最大値は 16EiB
slave_preserve_commit_order パラメータ変更(8.0.27):デフォルトはオン
Slave_received_heartbeats 廃止(8.0.1)
Slave_retried_transactions 廃止(8.0.1)
slave_rows_search_algorithms パラメータ変更(8.0.2) :デフォルトはINDEX_SCAN、HASH_SCAN
Slave_running 廃止(8.0.1)
sql-mode パラメータ変更(8.0.1):デフォルトは 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
パラメータ変更(8.0.1):デフォルトは ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_ENGINE_SUBSTITUTION
symbolic-links パラメータ変更(8.0.2):デフォルトはオフ
table_open_cache パラメータ変更(8.0.4):デフォルトは 4000、最小値は 1、最大値は 524288
temp-pool 廃止(8.0.1)
thread_stack パラメータ変更(8.0.2(bitsize=64)):デフォルトは 286720、最小値は 131072、最大値は 18446744073709550592
パラメータ変更(8.0.27(bitsize=64)):デフォルトは 1048576、最小値は 131072、最大値は 18446744073709550592
パラメータ変更(8.0.2(bitsize=32)):デフォルトは 221184、最小値は 131072、最大値は 4294966272
パラメータ変更(8.0.27(bitsize=32)):デフォルトは 1048576、最小値は 131072、最大値は 4294966272
time_format 廃止(8.0.3)
time_zone パラメータ変更(8.0.19):デフォルトはシステム
tls_version パラメータ変更(8.0.16):デフォルトはTLSv1、TLSv1.1、TLSv1.2、TLSv1.3
パラメータ変更(8.0.28):デフォルトはTLSv1.2、TLSv1.3
transaction_write_set_extractionb パラメータ変更(8.0.2):デフォルトは XXHASH64
tx_isolation 廃止(8.0.3)
tx_read_only 廃止(8.0.3)

5.1.4 予約後、関数の差異を確認する

バージョンアップにより予約語や使用できる関数に違いがある可能性があります。このため、差異を確認する必要があるとのことです。

dev.mysql.com

dev.mysql.com

下図は、オラクル社が公開しているMySQL8.0で追加となった予約語の情報となります。

6. バージョンアップ前の事前チェックツール

これまで、MySQL 5.7からMySQL 8.0へのバージョンアップへの影響について、オラクル社の推奨事項に沿って確認してきましたが、確認項目がかなり膨大であるがあることが分かりました。これでは、確認作業に膨大な時間がかかるだけでなく、見落としも発生する可能性が高く、バージョンアップについて悲観的になるのも無理はないと思います。

6.1 バージョンアップ前の事前チェック内容

このような状況を想定し、オラクル社によってバージョンアップ前に確認すべき事項や作業内容が簡潔(12項目)にまとめられています。
詳細な内容やご利用方法につきましては、下記のMySQLサイトを参照してください。

dev.mysql.com

6.2 バージョンアップ前の事前チェックツール(checkForServerUpgrade)

さらに確認を容易にするために、バージョンアップ前の事前チェックツールとして、checkForServerUpgrade(MySQLShell)を準備されています。
checkForServerUpgrade関数を実行することで、上記のバージョンアップ前の事前チェック内容を確認し、問題がある内容が出力されるようになっています。

詳細な内容やご利用方法につきましては、下記のMySQLサイトを参照してください。

dev.mysql.com

最後に

Amazon RDS for MySQL 5.7の標準サポート終了の通知に伴って、MySQL 5.7からMySQL 8.0のバージョンアップ前の確認内容についてオラクル社から提供されている動画や資料を拝見させていただきながら勉強させていただきました。差異を確認していく中でバージョンアップにおける影響度の大きさを確認できただけでなく、動画を拝見する前は、事前チェックツールの存在を知らず、開発環境で確認しながら手直しをしていくしかないかと思っておりましたが、とても便利なツールを知ることができ、とても有意義な調査になったと思います。

延長サポートを利用すると費用がかかってしまうだけでなく、最長でも3年後にはバージョンアップ対応をせざるを得なくなることや、さらにバージョン差が開いてしまうことにより、バージョンアップの難易度は上がっていくことが予想されます。

便利なツールも提供されており、なによりもバージョンアップを実施することで、より良い機能が利用できるようになりますので、これを機にバージョンアップの検討を進めると同時に調査を開始してみてはいかがでしょうか。