MySQLバージョンアップ 8.0.40→8.4.0についてRDSでの影響まとめ

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.

重要な変更: 非推奨のサーバーオプションで起動するか、MySQL設定ファイルのセクション にmysql_native_password 有効化できます --mysql-native-password=ONmysql_native_password=ON[mysqld]詳細については、 「ネイティブ プラグ可能認証」を参照してください。(バグ #36337893)

Amazon RDS for MySQL 8.4 でデフォルト認証プラグインに mysql_native_password を使うように変更する
・Mysql 8.4 のタイミングでdefault_authentication_pluginパラメータは削除
・MySQL 8.4 でデフォルト認証プラグインを変更するには authentication_policy を指定する
https://dev.classmethod.jp/articles/rds84_mysql_native_password/
mysql_native_password プラグインは MySQL 8.4 でも動作しますが、このプラグインのサポートは MySQL 8.4 で終了します。デフォルトの認証プラグインを変更するには、カスタムパラメータグループを作成し、authentication_policy パラメータの値を変更します。https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/MySQL.KnownIssuesAndLimitations.html#MySQL.Concepts.KnownIssuesAndLimitations.authentication-plugin
既存の Amazon RDS インスタンスを MySQL 8.0 から MySQL 8.4 にアップグレードした場合、プライマリユーザーを含む既存のデータベースユーザーは引き続き を使用します
mysql_native_password。ただし、すべての新規ユーザーは認証プラグインを使用して作成されます
caching_sha2_password
https://aws.amazon.com/jp/blogs/database/amazon-rds-for-mysql-lts-version-8-4-is-now-generally-available/

パラメーターグループをパラメーターグループファミリーmysql8.4で作成

  • mysql_native_password = ON (プラグイン自体を有効化)
  • authentication_policy = *:mysql_native_password (デフォルト認証プラグインを指定)

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:

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

確認

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

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

以前のバージョンの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;
SHOW VARIABLES LIKE 'group_replication%';

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

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

レプリケーション関連

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

古い時刻型関連

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

アップグレード関連

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

–no-dd-upgradeはサーバー起動時のコマンドラインオプションであり、RDSではユーザーが設定不可。 パラメータグループにも該当項目なし。 MySQL 8.4での削除による影響なし。
https://dev.mysql.com/doc/refman/8.0/en/server-options.html

古いオプション

  • --old--new--language → 削除
-- データベースに接続して確認
SHOW VARIABLES LIKE '%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サーバーの**設定値(システム変数)**のことです。

いくつかのサーバーオプションと変数の削除、使用するとエラー

default_authentication_pluginの削除
  • default_authentication_plugin: MySQL 8.0.27で非推奨となり、現在は削除されています。 authentication_policy 代わりに使用してください。変数を設定するための構文が authentication_policy 変更されていることにも注意してください。詳細については、マニュアルの説明を参照してください。
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 とは

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

mysql_ssl_rsa_setup ユーティリティは、このリリースで削除されました

MySQL 8.0.34で非推奨となった 
mysql_ssl_rsa_setup ユーティリティは、このリリースで削除されました。OpenSSLを使用してコンパイルされたMySQLディストリビューションの場合、MySQLサーバーは起動時に不足しているSSLおよびRSAファイルを自動生成できます。詳細については、 
「MySQLを使用したSSLおよびRSA証明書と鍵の作成」をご覧ください。(WL #16205)

下記記事より、Amazon RDSはインスタンス作成時にTLS証明書を作成しDBインスタンスに自動的にインストールするため影響なし

ユーザーが作成する必要がない

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Security.html

TABLESPACEについて

ENGINE 次の SQL ステートメントから 句のサポートが削除されました。

  • DROP TABLESPACE(すべてのバリエーション)
  • ALTER TABLESPACE ... DROP DATAFILE
  • のその他のすべてのバリエーションALTER TABLESPACE。ただし、次の 2 つの例外があります。
    1. ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}
    2. ALTER UNDO TABLESPACE ... SET {ACTIVE|INACTIVE} ENGINE=INNODB

前述の例外的な場合を除き、ENGINE節をALTER TABLESPACEまたはと共に使用するDROP TABLESPACE と、ステートメントはエラーにより拒否されます。

ENGINEALTER TABLESPACEおよびステートメントの句はDROP TABLESPACE 、MySQL 8.0 で非推奨になりました。(WL #16055)

SET_USER_IDの削除

  • MySQL 8.2.0で非推奨となった権限SET_USER_IDは、このリリースで削除されました。この権限を GRANT文中で使用すると構文エラーが発生します。代わりに、権限 SET_ANY_DEFINERと ALLOW_NONEXISTENT_DEFINER 権限を使用してください。(WL #15875)

MySQLクライアントでDB内のかくユーザーがSET USER ID権限の確認が必要です

SHOW GRANTS FOR 'ユーザー名'@'ホスト名'
SET_USER_IDとは

他のユーザーを「DFINER」として指定できる権限です(8.0.16で導入、8.4で削除)

DFINERとは「誰の権限で実行するか」を指定する属性です。この属性は「ストアドプロシージャ」などに設定します

ストアドプロシージャとはデータベースに保存する処理のかたまりのこと。何度も使う処理を名前を付けて保存できます。

データ移行やセキュリティ強化のための権限で、MySQL 8.4より2つに分化して、リスクなく管理できるようにした

存在しないユーザーを指定できる権限は危険性が高いため)

-- 「給与計算」という処理を保存
CREATE PROCEDURE 給与計算()
BEGIN
  SELECT 名前, 給与 FROM 社員テーブル;
END;

-- 呼び出すだけで使える
CALL 給与計算();
MySQL 8.0.16〜8.1
  ↓
SET_USER_ID (1つの権限)
・存在するユーザーをDEFINERに指定できる
・存在しないユーザーもDEFINERに指定できる
  ↓
MySQL 8.4〜
  ↓
分裂して2つになった
  ├─ SET_ANY_DEFINER (存在するユーザーを指定)
  └─ ALLOW_NONEXISTENT_DEFINER (存在しないユーザーも指定)

SET_USER_ID権限を持つユーザーを確認

全ユーザーを確認

SELECT user, host FROM mysql.user;

ユーザーの詳細な権限を確認

SHOW GRANTS FOR 'ユーザー名'@'ホスト名';

まとめて

SELECT 
    GRANTEE,
    PRIVILEGE_TYPE,
    IS_GRANTABLE
FROM information_schema.USER_PRIVILEGES
WHERE PRIVILEGE_TYPE = 'SET_USER_ID';
SELECT grantee, PRIVILEGE_TYPE 
FROM information_schema.USER_PRIVILEGES 
WHERE PRIVILEGE_TYPE LIKE '%SET_%';

SET_USER_IDから新しい権限に置き換える
RDSではALLOW_NONEXISTENT_DEFINERは使用できないため、SET_ANY_DEFINERのみ付与してください。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.MySQL.CommonDBATasks.dynamic-privileges.html

GRANT SET_ANY_DEFINER ON *.* TO 'ユーザー名'@'ホスト名';
  • GRANT 権限を付与するコマンド
  • SET_ANY_DEFINER 他のユーザーをDEFINERに指定できる権限
  • ON *.* 全データベース・全テーブルに対して
mysql.user とは?

MySQLのシステムテーブルで、データベースユーザー情報を保存しているテーブルです。

  • 場所: mysqlデータベースの中のuserテーブル
  • 内容: ユーザー名、ホスト、パスワード、各種権限の情報
  • 構造: 各権限が列(カラム)として存在(例: Select_priv, Insert_priv, Set_user_id_priv
    Set_user_id_priv = SET_USER_ID権限の保有状況を記録するカラム
GRANTEE とは?

権限を付与された対象のこと。つまり「ユーザー」です。

例’ユーザー名’@’ホスト名’

プラグインの削除

以下のプラグインは削除されました。これらのプラグインは、サーバーシステム変数、CMakeオプション、およびそれらに関連するその他の機能とともに、ここに記載されています。これらも削除されました。

パラメーターグループで確認したところ項目なし、SHOW PLUGINS;で存在を確認してなければ影響なし

弱い暗号化方式のサポートが削除

  • 弱い暗号化方式のサポートが削除されました。つまり、暗号化接続を設定する際に、MySQLでは以下の条件を満たさない暗号化方式を指定できなくなりました。
    • 適切な TLS バージョン (TLS v1.2 または TLSv1.3)
    • 前方秘匿性
    • 暗号、証明書、またはその両方でSHA2を使用する
    • GCM の AES またはその他の AEAD アルゴリズムまたはモード
    これは、システム変数 ssl_cipher、 admin_ssl_cipher、 tls_ciphersuites、 の 設定に影響しますadmin_tls_ciphersuites。これらの変数の許容値については、各変数の説明を参照してください。libmysqlclientこの変更によって は影響を受けず、条件を満たさない暗号も引き続きサポートされるため、以前のバージョンの MySQL に引き続き接続できることに 注意してください。(WL #15801)

下記のコマンドで確認

show variables like 'ssl_cipher';
show variables like 'tls_ciphersulties';
show variables like 'admin_ssl_cipher';
show variables like 'admin_tls_ciphersulties';

ファイアウォールに関する注意事項

  • アップグレード後、一部の MySQL ファイアウォール ストアド プロシージャが期待どおりに更新されませんでした。(バグ #36084930)
  • MySQL Enterprise Firewall が提供するストアドプロシージャにいくつかの機能強化が行われました。これらの改善点は以下のとおりです。
    • MySQL Enterprise Firewall が提供するストアドプロシージャは、トランザクション対応になりました。ファイアウォールストアドプロシージャの実行中にエラーが発生すると、エラーが報告され、その時点までにストアドプロシージャによって行われたすべての変更がロールバックされます。
    • DELETEファイアウォール ストアド プロシージャでは、プラス ステートメント の不要な組み合わせINSERTINSERT IGNOREプラスUPDATE 演算の実行が回避されるようになり、処理速度と効率が向上しました。
    • 以前は非推奨だったユーザーベースのストアドプロシージャとUDFは、非推奨警告を生成するようになりました。つまり、sp_set_firewall_mode() またはのいずれかを呼び出すと、非推奨警告が生成されます。詳細については、 「ファイアウォールアカウントプロファイルストアドプロシージャ」および「アカウントプロファイルからグループプロファイルへの移行」sp_reload_firewall_rules()を参照してください 。

下記でファイアウォール関連のプロシージャが存在するか確認

SHOW PROCEDURE STATUS WHERE Name LIKE '%firewall%';

サーバー管理

  • 重要な変更: このリリースでは、ステートメントの使用に特化した権限が追加されましたFLUSH PRIVILEGES。既存の RELOAD権限とは異なり、新しい FLUSH_PRIVILEGES権限はステートメントにのみ適用されますFLUSH PRIVILEGES。この権限はグローバルスコープで、ユーザーとロールに適用されます。このRELOAD権限は、後方互換性を保つために引き続きサポートされます。この権限を持つユーザーは、FLUSH PRIVILEGESアップグレード後も引き続きステートメントを実行できます。MySQL 8.4リリースへのアップグレードの一環として、この権限を持つユーザーがいるかどうかが確認されます FLUSH_PRIVILEGES。いない場合は、この RELOAD権限を持つユーザーに新しい権限が自動的に割り当てられます。(WL #16044)
  • 重要な変更: このリリースでは新しい OPTIMIZE_LOCAL_TABLE権限が追加されました。ユーザーは、ステートメントを実行するためにこの権限を持っている必要があり OPTIMIZE LOCAL TABLEます OPTIMIZE NO_WRITE_TO_BINLOG TABLE。以前のリリースからアップグレードする場合、すでにSYSTEM_USER権限を持っているユーザーには自動的に OPTIMIZE_LOCAL_TABLE権限が付与されます。(WL #15819)
  • 後方互換性あり
  • 既存のSYSTEM_USER権限保持者に自動的にOPTIMIZE_LOCAL_TABLEが付与される

スレッドプールのメモ

  • 重要な変更: 以前は、 で定義された制限に thread_pool_max_transactions_limit 達すると、既存の接続上の新規接続またはトランザクションが、既存のトランザクションが1つ以上完了するまでハングしているように見えることがありました。本リリースでは、 thread_pool_longrun_trx_limit で指定されたスレッドプールのトランザクションの最大数と、進行中のトランザクション数が一致するまでの時間の長さに上限を設定することで(本リリースで追加)、 thread_pool_max_transactions_limit場合にこの問題を軽減する方法が導入されました。この制限に達すると、スレッドグループのトランザクション数の上限は一時停止されます。長時間実行トランザクションの数が大幅に減少した場合、 再度強制適用されます(そして実際に強制適用されます)。 この決定方法の詳細については、サーバーシステム変数thread_pool_max_transactions_limitの説明を参照してください 。(WL #16132)thread_pool_longrun_trx_limit

まずスレッドプール機能が有効になっているかどうかを以下のSQLで確認する

SELECT * FROM information_schema.PLUGINS WHERE PLUGIN_NAME LIKE '%thread_pool%';

パフォーマンス スキーマ 
tp_connectionsスレッド プール プラグイン テーブルに、 
adminグループ内の接続のエントリが含まれていませんでした。(バグ #36296830)

追加または変更された機能

InnoDBのオプションデフォルト値の変更

show variables like 'iinodb_adaptibe_hash_index';などで各オプションの設定値の確認

新しいデフォルト値
https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html

InnoDBとは

MySQLのデフォルトストレージエンジンです。


ストレージエンジンとは

データを実際にどのように保存・管理するかを決める仕組み

8.4.1

スレッドプールのメモ

  • 接続ハンドラスレッドが存在しないスレッドグループへの接続が停止していました。接続ハンドラスレッドは、少なくとも1つの接続スレッドが残っている場合にのみ終了するように修正しました。(バグ #36550125)
  • 以前のリファクタリングでは、受信接続要求の処理時に実行される接続ロックが誤って削除されていました。その結果、新しい接続を追加するスレッドと、それらを処理する接続ハンドラスレッドの間で競合状態が発生していました。その結果、接続要求が無視され、処理されない可能性があり、接続試行がハングしているように見えました。この問題は、キューを処理する前に接続を取得し、新しいスレッドを起動または作成する前に接続を解放することで修正しました。(バグ #36548687)
  • thread_pool_longrun_trx_limit システム変数を規定の範囲外の値に 設定することができました 。さらに、この変数の設定は、SHOW VARIABLES または SELECT の出力に反映されませんでした。(バグ #36347102、バグ #36371145)
  • SET PERSIST_ONLYでは正しく動作しませんでした thread_pool_max_transactions_limit。(バグ #35019884)

認証に関する注意事項

  • プロキシなしでプラグインを使用する場合のアクセス拒否エラー の明確な理由を示すようにログ メッセージが改善されました authentication_ldap_sasl。(バグ #35317691)
  • MySQL LDAP SASL 認証は、OpenLDAP サーバーにアクセスするために GSSAPI メソッドを使用する場合、MySQL サーバー エラー「プラグインの authentication_ldap_sasl が次のように報告しました: 「LDAP 認証に失敗しました、またはグループの取得に失敗しました: LDAP エラー: 無効な DN 構文」」で拒否されました。これは、OpenLDAP が使用されたルート DN を認識しなかったためです。(バグ #32631511)

8.4.2

8.4.3

SQL関数と演算子に関する注意事項

  • DATABASE()この関数がクエリの一部として使用された場合、 出力は切り捨てられましたUNION。(バグ #36871927)

8.4.3で修正済み?

スレッドプールのメモ

  • 一部の同時接続試行が正しく処理されませんでした。(バグ #36625082)

追加または変更された機能

重要な変更: OpenSSLライブラリがバンドルされているプラ​​ットフォームにおいて、MySQL Server用のリンクされたOpenSSLライブラリがバージョン3.0.15に更新されました。詳細については、 
OpenSSL 3.0シリーズのリリースノートおよび 
OpenSSLセキュリティアドバイザリ[2024年9月3日]をご覧ください。(バグ番号37021075)

  • MySQLサーバーは、 GROUP BYROLLUP 修飾子の代替構文をサポートするようになりました。次のクエリを考えてみましょう。SELECT IF(GROUPING(year), 'All years', year) AS year, IF(GROUPING(country), 'All countries', country) AS country, IF(GROUPING(product), 'All products', product) AS product, SUM(profit) AS profit FROM sales GROUP BY year, country, product WITH ROLLUP;代替構文を使用すると、同じクエリを次のように記述できます。SELECT IF(GROUPING(year), 'All years', year) AS year, IF(GROUPING(country), 'All countries', country) AS country, IF(GROUPING(product), 'All products', product) AS product, SUM(profit) AS profit FROM sales GROUP BY ROLLUP (year, country, product);どちらのバージョンのクエリでも同じ結果が生成されます。詳細については、「GROUP BY 修飾子」および「SELECT ステートメント」を参照してください。(WL #15843)

従来のWITH ROLLUP構文は引き続き使用可能

8.4.4

アカウント管理に関する注意事項

  • 失敗したパスワード検証が必ずしも正しく処理されるとは限りませんでした。(バグ #37041439)
  • の実行後にデータベース キャッシュが適切にフラッシュされませんでしたDROP USER。(バグ #37132323)

バグの修正内容の報告

インストールに関する注意事項

  • MySQL 5.7 からそれ以降の MySQL リリース シリーズにアップグレードする場合、システム作成アカウントmysql.sysと アカウントは、MySQL 8.0 で非推奨となり、MySQL 9.0 で削除されたプラグインの代わりに認証プラグインmysql.sessionを使用するように変更されます 。(バグ #36608636)caching_sha2_passwordmysql_native_password

MySQL 5.7からのアップグレード時のみ該当

8.4.5

追加または変更された機能

重要な変更: OpenSSLライブラリがバンドルされているプラ​​ットフォームでは、MySQL Serverへのリンク付きOpenSSLライブラリがバージョン3.0.16に更新されました。詳細については、 
OpenSSL 3.0シリーズのリリースノートおよび 
OpenSSLセキュリティアドバイザリ(2025年2月11日)をご覧ください。(バグ番号36033684)

確認方法

SHOW VARIABLES LIKE 'version_compile_ssl_library';
SHOW VARIABLES LIKE 'have_ssl';

8.4.6

設定に関する注意事項

  • Microsoft Windows: デフォルト以外の Windows サービス名が使用されていた場合、MySQL Configurator を使用した MySQL Server のインプレース アップグレードが失敗しました。(バグ #37917039)
  • Microsoft Windows: サーバーを 8.0 から上位シリーズにアップグレードすると、MySQL Configurator は my.iniファイルにカスタム サーバー設定を保持しませんでした。(バグ #37481548)
  • Microsoft Windows: MySQL Configurator を使用して MySQL Server をアップグレードする際、カスタム エラー ログ名が使用されていると、「サーバーの起動とシステム テーブルのアップグレード」手順でプロセスがハングしました。(バグ #37463478)

インストールに関する注意事項

  • MySQLをインストールするためのDebianパッケージが、root以外のユーザーでも実行できるようになりました。これにより、root権限のないユーザーによるインストールが必要なDebianまたはUbuntuシステムで発生する問題を回避できます。(バグ #37765153)
  • RPM および Yum リポジトリのインストールが、Red Hat Enterprise Linux および Oracle Linux 10 でサポートされるようになりました。(バグ #37592019)

Linux OSへのパッケージインストールに関するする内容でRDSであれば関係はない

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

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

「簡易動作確認(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


MySQL 8.0→8.4 ZIPアップグレード時の起動トラブル対処法

MySQLをZIP版で8.0から8.4に上書きアップグレードした際、net startで起動しない問題の調査・解決手順をまとめました。

状況の整理

ZIP版MySQLでは、上書きすると bin フォルダ内の実行ファイル(mysqld.exe など)は更新されますが、自分で作成した my.ini や data フォルダはそのまま残ります。MSI版と違い、my.ini は自動生成されないため、以前のインストール時に作成したか、my.ini なしのデフォルト設定で動いていた可能性があります。

エラーログを探す

MySQLは起動時のエラーを .err ファイルに記録します。以下の場所を確認してください。

C:\ProgramData\MySQL\MySQL Server 8.4\Data\ 内
MySQLインストールフォルダの data\ 内
ファイル名は「コンピュータ名.err」という形式

エラーログが存在しない場合は、MySQLがログを書き込む前の段階(設定ファイル読み込みやパス解決など)で失敗しています。

コンソールモードで直接起動する

サービス経由ではなく、mysqld.exe を直接実行してエラーを画面に表示させます。これが最も確実な調査方法です。

コマンドプロンプトを開き、MySQL の bin フォルダに移動して以下を実行します。

cd C:\mysql-8.4のパス\bin
mysqld --console

または、フルパスで直接実行します。

"C:\mysql-8.4のパス\bin\mysqld.exe" --console

このコマンドはサービス登録を経由せず mysqld.exe を直接呼び出すため、サービス側の問題か MySQL 本体の問題かを切り分けられます。管理者権限は不要ですが、既存のMySQLサービスが起動中だとポート競合でエラーになるため、事前にサービスを停止してから試してください。停止は Ctrl+C でできます。

設定ファイルの検証

my.ini に8.4で廃止されたオプションが含まれていると起動に失敗します。以下のコマンドで設定ファイルの問題を検出できます。

mysqld --validate-config

–defaults-file オプションで設定ファイルを明示することもできます。

mysqld --validate-config --defaults-file="C:\...\my.ini"

サービス登録の確認

Windowsに登録されているMySQLサービスの設定を確認します。

sc qc MySQL

出力される BINARY_PATH_NAME を確認してください。ここに表示されるパスが古い8.0のまま、または存在しないパスを指していると起動しません。–defaults-file オプションでmy.iniのパスが指定されているかも確認ポイントです。

サービスの再登録

サービス登録に問題がある場合は、一度削除して再登録します。

まず既存のサービスを削除します。

mysqld --remove MySQL

次に新しいパスでサービスを登録します。

mysqld --install MySQL

設定ファイルを明示する場合は以下のようにします。

mysqld --install MySQL --defaults-file="C:\...\my.ini"

これらのコマンドは管理者権限が必要です。

データディレクトリの初期化(最終手段)

データを保持したままアップグレードできない場合、または新規で始める場合は、データディレクトリを初期化します。既存データは失われるので注意してください。

mysqld --initialize-insecure --console

–initialize-insecure は root パスワードなしで初期化します。–initialize を使うとランダムな一時パスワードが生成され、コンソールに表示されます。

ポート競合の確認

MySQLのデフォルトポート3306が他のプロセスに使われていないか確認します。

netstat -ano | findstr :3306

何か表示されたら、そのPIDのプロセスを確認して停止するか、my.ini で別のポートを指定してください。

my.ini がない場合

my.ini がなくても MySQL は起動できますが、明示的に作成したほうが管理しやすくなります。最小限の設定例は以下の通りです。

[mysqld]
basedir=C:/mysql-8.4
datadir=C:/mysql-8.4/data
port=3306

パスの区切りはバックスラッシュではなくスラッシュを使うか、バックスラッシュを二重にしてください。

切り分けのフローチャート的な考え方

まず mysqld –console を試します。これで起動すればサービス登録側の問題なので、sc qc MySQL でパスを確認し、必要ならサービスを再登録します。

mysqld –console でもエラーが出る場合は、そのエラーメッセージを読みます。設定ファイルのエラーなら mysqld –validate-config で詳細を確認します。データディレクトリのエラーなら data フォルダの存在とパーミッションを確認します。ポート競合なら netstat で確認します。

エラーメッセージが最も重要な手がかりになるので、–console の出力内容をメモしておくと解決が早くなります。

MySQL 8.4 ZIP版アップグレード・トラブルシューティング

MySQL 8.0から8.4(LTS)へZIP版を上書きしてアップグレードした際に、サービスが起動しない場合の調査と解決手順です。

事前の必須チェック

ZIP版の実行には最新の「Visual C++再頒布可能パッケージ」が不可欠です。これが不足しているとエラーすら出ずに終了することがあります。また、作業前にタスクマネージャーで古い「mysqld.exe」が完全に終了していること、および管理者権限で作業していることを確認してください。

コンソールによる直接起動とエラー特定

サービスを通さず、バイナリを直接実行して画面にエラーを表示させるのが最も確実な調査方法です。 binフォルダへ移動し「mysqld –console」を実行してください。ここで表示される[ERROR]メッセージが解決の直接的なヒントになります。既存のサービスが動いているとポート競合を起こすため、必ず停止した状態で試してください。

8.4で廃止された設定の検証

MySQL 8.4はLTS版であり、8.0で非推奨だった古い設定が多数削除されています。 「mysqld –validate-config」を実行して、現在のmy.iniに無効な記述がないか確認してください。特に「mysql_native_password」認証プラグインなどの古い認証方式や、廃止されたシステム変数が残っていると起動に失敗します。

Windowsサービス登録の修正

「net start」で起動しない原因の多くは、サービスに登録されているパスが古い8.0のままになっていることです。 「sc qc MySQL」コマンドで、BINARY_PATH_NAMEが新しい8.4の場所を指しているか確認してください。パスが古い場合は「mysqld –remove MySQL」で一旦削除し、「mysqld –install MySQL –defaults-file=”(my.iniのパス)”」で再登録を行う必要があります。

フォルダ権限と初回起動時の挙動

新しく配置したフォルダには、実行ユーザー(Network Service等)のアクセス権限が必要です。 また、8.4への初回起動時はデータ構造の自動変換(アップグレード処理)が行われます。データ量によっては数分以上かかることがありますが、ログに動きがあれば正常です。この最中に強制終了するとデータ破損のリスクがあるため、ログを見守りながら待機してください。

ログファイルの確認

問題が解決しない場合は「.err」ファイルを直接確認します。 標準ではProgramData内、あるいはmy.iniのdatadirで指定した場所に「コンピュータ名.err」という名前で出力されます。コンソール出力でも原因が掴めない場合は、ここに出力される詳細なスタックトレースを確認してください。

目次