MySQLバージョンアップ 8.0.40→8.4.0

8    .    0    .    33
↑         ↑         ↑
メジャー  マイナー  パッチ
(Major)  (Minor)  (Patch)
目次

パッチバージョンアップ(8.0.40 → 8.4.6)ではどのリリースノートの確認すればいいか

8.0.40から8.4.6へのアップグレードについて、以下のリリースノートを確認します。

  1. MySQL 8.4 Release Notes(8.0から8.4の変更点)
    ※8.1、8.2、8.3の変更は8.4に統合済みのため個別確認不要
  2. 8.4.0から8.4.6までの各バージョンのリリースノート

For additional MySQL 8.4 documentation, see the MySQL 8.4 Reference Manual, which includes an overview of features added in MySQL 8.4 (What Is New in MySQL 8.4 since MySQL 8.0), and discussion of upgrade issues that you may encounter while upgrading.

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-40.html

リリースノートのセクションの説明

セクション内容
C API Notes
C言語のAPIに関する変更。アプリケーション開発者向け。通常は無視してOK。
非同期インターフェースが安全でない静的ローカル変数を使用していた問題を修正
Compilation Notes
MySQLをソースからビルドする際の変更。使用ライブラリのバージョンアップ等。Dockerイメージ使用なら無視してOK。
・Fedora 41、Ubuntu 24.10でコンパイルできない問題を修正
・curl 8.9.1へアップグレード
・zlib 1.3.1へアップグレード
・lz4 1.10.0へアップグレード
・libfido 1.15.0へアップグレード
SQL Function and Operator Notes
SQL関数や演算子の変更・修正。例: DATABASE(), AES_ENCRYPT()等。使っている関数があれば確認必要。
DATABASE()関数がUNIONクエリ内で使用された際に出力が切り捨てられていた問題を修正
Performance Schema Notes
パフォーマンス監視機能の変更。ロック情報、クエリ統計等。パフォーマンス調査時に関係。
・data_locksとdata_lock_waitsテーブルのクエリパフォーマンスを改善
・SELECT * FROM sys.innodb_lock_waits; のパフォーマンスを改善
・DATA_LOCKSとDATA_LOCK_WAITSに主キーを追加
sys Schema Notes
sysスキーマ(パフォーマンス分析用のビュー)の改善。パフォーマンス分析時に関係。
innodb_lock_waitsビューのパフォーマンスを改善
Thread Pool Notes
スレッドプール(Enterprise版の機能)の変更。Community版使用なら無視してOK。
同時接続試行が正しく処理されない問題を修正
Functionality Added or Changed
新機能・変更された機能。必ず確認すべき。
重要: OpenSSLライブラリを3.0.15へ更新(セキュリティ修正)
mysqlクライアントに–system-commandオプションを追加
Bugs Fixed
修正されたバグ一覧。自分のアプリに影響ないか確認必要。
・InnoDBのJOINクエリのパフォーマンス問題を修正
・INSTANT algorithmでのDELETE/UPDATE時の予期しない停止を修正
・全文検索インデックスの最適化問題を修正
・パーティションテーブルのALTER TABLEの問題を修正
・Group Replicationのメモリリークを修正
・mysqldumpのSQL文エスケープ問題を修正
・AES_ENCRYPT()関数が正しい結果を返さない問題を修正
・CREATE TABLE … SELECT文の処理問題を修正
・外部キー付きCREATE TABLEの問題を修正

8.4.0

Deprecation and Removal Notes

重要な変更 mysql_native_password

Important Change: The deprecated mysql_native_password authentication plugin is now disabled by default. It can be enabled by starting MySQL with the new --mysql-native-password=ON server option, or by adding mysql_native_password=ON to the [mysqld] section of your MySQL configuration file.

パラメーターグループをパラメーターグループファミリーmysql8.4で作成し そのパラメーターグループでmysql_native_password on

AWS RDSのパラメーターグループとは

[mysqld]
max_connections = 100
innodb_buffer_pool_size = 1G
mysql_native_password = ON
character_set_server = utf8mb4
```

これをRDSではパラメータグループとして管理
```
パラメータグループの中身:
├─ max_connections: 100
├─ innodb_buffer_pool_size: 1073741824
├─ mysql_native_password: ON
└─ character_set_server: utf8mb4
  • 1つのパラメータグループを複数のRDSインスタンスに紐付けることが可能
  • 各インスタンスで再起動しない限り、静的パラメータは反映されません

パーティショニング

  • Partitioning: Silent omission of columns with index prefixes as part of a table’s partitioning key was deprecated in MySQL 8.0.21, and generated a warning. In this release, the use of any such columns in the proposed partitioning key is now expressly disallowed, and causes the CREATE TABLE or ALTER TABLE statement in which it occurs to be rejected with an error.For more information, see Column index prefixes not supported for key partitioning, and KEY Partitioning. (WL #16054)References: See also: Bug #31100205.

「インデックスプレフィックスを持つカラムをパーティショニングキーとして使用すること」が禁止されました。

インデックスプレフィックスとは

カラムの一部分だけにインデックスを作成する機能。 特に長い文字列カラムでインデックスのサイズを小さくするために使われる。インデックス = データベースの検索を速くするための索引

パーティショニングキーとは

テーブルをパーティション(複数の物理的な部分)に分割する際の基準となるカラム。

Replication: Syntax for a number of features relating to MySQL Replication that was deprecated in previous versions of MySQL has now been removed. These features include aspects of SQL statement syntax as well as several system status variables in the MySQL server. These changes are detailed following.

SQL statements removed.  The following SQL statements have been removed (replacements in brackets): START SLAVE (START REPLICA); STOP SLAVE (STOP REPLICA); SHOW SLAVE STATUS (SHOW REPLICA STATUS); SHOW SLAVE HOSTS (SHOW REPLICAS); RESET SLAVE (RESET REPLICA); CHANGE MASTER TO (CHANGE REPLICATION SOURCE TO); RESET MASTER (RESET BINARY LOGS AND GTIDS); SHOW MASTER STATUS (SHOW BINARY LOG STATUS); PURGE MASTER LOGS (PURGE BINARY LOGS); and SHOW MASTER LOGS (SHOW BINARY LOGS).

The statements just listed have also been removed from all MySQL test programs and files, and elsewhere, where used internally.

Statement options removed.  The following options formerly supported by CHANGE REPLICATION SOURCE TO and START REPLICA have been removed and are no longer accepted by the server. They are listed here for each of these statements, with their replacements in brackets:

レプリケーション関連の旧構文が完全に削除されています。

以前のバージョンのMySQLでサポートされていた多くのサーバーオプションと変数は、このリリースで削除されました。MySQL 8.4でこれらを設定しようとするとエラーが発生します。これらのオプションと変数は以下のとおりです。

弱い暗号化方式のサポートが削除されました。つまり、暗号化接続を設定する際に、MySQLでは以下の条件を満たさない暗号化方式を指定できなくなりました。

MySQLでは、非一意キーや部分キーを外部キーとして使用することは非推奨です。このリリース以降、このような非標準キーは、以下のいずれかの方法で明示的に有効にする必要があります。

グループレプリケーションの設定変更について

  • グループ レプリケーション: システム group_replication_allow_local_lower_version_join 変数は非推奨となり、設定すると警告 (ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT) が発生します。この変数はMySQLの将来のバージョンで削除される予定です。互換性のないメンバーをグループに参加させる理由がなくなったため、この機能の代替機能は予定されていません。(WL #16018)

グループレプリケーションを使用していなければ影響なし

グループレプリケーションとは

複数のMySQLサーバーを自動的に同期させる機能です。

下記で確認できます。

SELECT * FROM performance_schema.replication_group_members;

削除されたサーバーオプションと変数

以前のバージョンで非推奨だった設定項目が、MySQL 8.4で完全に削除されました。これらを設定するとエラーになります。

レプリケーション関連

  • binlog_transaction_dependency_tracking → 削除(機能は自動的に適用される)
  • group_replication_recovery_complete_at → 削除(最も安全な動作がデフォルトに)

古い時刻型関連

  • avoid_temporal_upgradeshow_old_temporals → 削除(すでに効果なし)

アップグレード関連

  • --no-dd-upgrade--upgrade=NONE を使用

古いオプション

  • --old--new--language → 削除

SSL/TLS関連

  • --ssl--skip-sslhave_ssl など → --tls-version を使用

認証関連

  • default_authentication_pluginauthentication_policy を使用

対応が必要かの確認方法

SHOW VARIABLES LIKE '%binlog_transaction_dependency%';
SHOW VARIABLES LIKE '%group_replication_recovery%';
SHOW VARIABLES LIKE '%avoid_temporal_upgrade%';
SHOW VARIABLES LIKE '%show_old_temporals%';
SHOW VARIABLES LIKE '%authentication_plugin%';
SHOW VARIABLES LIKE '%ssl%';

RDSではパラメータグループで確認

variablesとは

MySQLサーバーの**設定値(システム変数)**のことです。

EXPLAIN出力の改善

EXPLAIN コマンドの出力で、テーブルにエイリアス(別名)を付けた場合、不要なスキーマ名(データベース名)が表示されなくなりました。

対応は不要

INFORMATION_SCHEMA.TABLESPACES の削除

INFORMATION_SCHEMA.TABLESPACES テーブルが削除されました。

下記で確認

SELECT * FROM INFORMATION_SCHEMA.TABLESPACES;

LOCK TABLES での LOW_PRIORITY 削除

LOCK TABLES ... WRITE で使われていた LOW_PRIORITY オプションが削除されました。

FLOAT/DOUBLE での AUTO_INCREMENT 削除(重要)

FLOATDOUBLE 型のカラムに AUTO_INCREMENT を使用できなくなりました。

通常は整数型(INT、BIGINT)で使うため、一般的な使い方では影響なさそうです

AUTO_INCREMENT とは

新しいレコードを挿入する際に、自動的に連番を割り当てる機能です。

8.4.2

8.4.3

8.4.4

8.4.5

8.4.6

この2つを組み合わせると、データの整合性やパフォーマンスに問題が起きる可能性があったため、MySQLが明示的に禁止した。

確認

パーティション化されたテーブルで、パーティショニングキーになっているカラムにプレフィックス付きのインデックスが設定されていないか確認する。

バージョンアップ後のテスト

テスト仕様書の作成・起票

「簡易動作確認(CRUD)」を手動で実施した内容を、正式なドキュメントとして整備する作業です。

(例)

Noテスト項目確認手順期待結果実施日結果エビデンス
1物件データ登録Tinkerで新規作成正常登録12/11OKscreenshot_01.png
2物件データ取得API経由で取得データ取得成功12/11OKlog_02.txt
No機能操作確認内容エビデンス
1物件登録登録画面から登録DB登録確認画面キャプチャ + phpMyAdmin画面
2物件一覧一覧表示データ表示確認画面キャプチャ
3物件編集編集して保存DB更新確認画面キャプチャ + phpMyAdmin画面
4物件削除削除実行DB削除確認phpMyAdmin画面

エビデンス取得

テスト実施の証跡を残す作業です。

エビデンスの例

  • スクリーンショット(画面表示結果)
  • ログファイル(SQL実行ログ、エラーログ)
  • APIレスポンス(JSON出力)
  • DBのデータ確認結果(SELECT結果)

リリースノートに準拠した影響調査

MySQLの公式リリースノートを確認し、システムに影響がある変更を洗い出す作業です。

調査項目の

  • 非推奨になった関数・構文 → 使っていないか確認
  • デフォルト値の変更 → 既存動作に影響ないか確認
  • パフォーマンス変更 → 遅くなる可能性のあるクエリの特定
  • 新機能 → 活用できるものがあるか検討

成果物イメージ

リリースノート項目影響有無影響箇所対応要否
utf8mb4がデフォルトに変更なし不要
GROUP BY の動作変更あり物件検索API要修正

アクション

  1. MySQL 8.4のリリースノートを確認
  2. 8.0 → 8.4の非互換性リストを確認
    • Deprecated Features
    • Removed Features
  3. 御社システムで使用しているSQL構文を洗い出し
    • Laravelのマイグレーションファイル
    • 生SQLを使っている箇所
    • ストアドプロシージャ

参考

https://github.com/idw-coder/mysql-upgrade/tree/main

リリースノート

https://dev.mysql.com/doc/refman/8.0/ja

リリースノートPDF

https://docs.oracle.com/cd/E17952_01/mysql-8.0-relnotes-en/mysql-8.0-relnotes-en.pdf

https://downloads.mysql.com/docs/mysql-8.4-relnotes-en.pdf

目次