8 . 0 . 33
↑ ↑ ↑
メジャー マイナー パッチ
(Major) (Minor) (Patch)
パッチバージョンアップ(8.0.40 → 8.4.6)ではどのリリースノートの確認すればいいか
8.0.40から8.4.6へのアップグレードについて、以下のリリースノートを確認します。
- MySQL 8.4 Release Notes(8.0から8.4の変更点)
※8.1、8.2、8.3の変更は8.4に統合済みのため個別確認不要 - 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_passwordauthentication plugin is now disabled by default. It can be enabled by starting MySQL with the new--mysql-native-password=ONserver option, or by addingmysql_native_password=ONto 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 TABLEorALTER TABLEstatement 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); andSHOW 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 TOandSTART REPLICAhave 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_upgrade、show_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-ssl、have_sslなど →--tls-versionを使用
認証関連
default_authentication_plugin→authentication_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 削除(重要)
FLOAT や DOUBLE 型のカラムに 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 つの例外があります。
ALTER TABLESPACE ... ADD DATAFILE ENGINE={NDB|NDBCLUSTER}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のみ付与してください。
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ファイアウォール ストアド プロシージャでは、プラス ステートメント の不要な組み合わせINSERTやINSERT 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のオプションデフォルト値の変更
- InnoDB : 次 の 構成 オプション の デフォルト 値 を 変更 し まし た
InnoDB:innodb_adaptive_hash_index、、、、、、、、、、、、、、、、、、、、、、 および 。innodb_buffer_pool_in_core_fileinnodb_buffer_pool_instancesinnodb_change_bufferinginnodb_doublewrite_filesinnodb_doublewrite_pagesinnodb_flush_methodinnodb_io_capacityinnodb_io_capacity_maxinnodb_log_buffer_sizeinnodb_numa_interleaveinnodb_page_cleanersinnodb_parallel_read_threadsinnodb_purge_threadsinnodb_read_io_threadsinnodb_use_fdatasynctemptable_max_ramtemptable_max_mmaptemptable_use_mmap起動オプションの影響を受ける設定--innodb-dedicated-serverも変更されました。新しいデフォルト値のリストについては、 「MySQL 8.0以降のMySQL 8.4の新機能」を参照してください。また、 「専用MySQLサーバーでの自動InnoDB設定の有効化」も参照してください。(WL #16179)
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 BY句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 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/11 | OK | screenshot_01.png |
| 2 | 物件データ取得 | API経由で取得 | データ取得成功 | 12/11 | OK | log_02.txt |
| No | 機能 | 操作 | 確認内容 | エビデンス |
|---|---|---|---|---|
| 1 | 物件登録 | 登録画面から登録 | DB登録確認 | 画面キャプチャ + phpMyAdmin画面 |
| 2 | 物件一覧 | 一覧表示 | データ表示確認 | 画面キャプチャ |
| 3 | 物件編集 | 編集して保存 | DB更新確認 | 画面キャプチャ + phpMyAdmin画面 |
| 4 | 物件削除 | 削除実行 | DB削除確認 | phpMyAdmin画面 |
エビデンス取得
テスト実施の証跡を残す作業です。
エビデンスの例
- スクリーンショット(画面表示結果)
- ログファイル(SQL実行ログ、エラーログ)
- APIレスポンス(JSON出力)
- DBのデータ確認結果(SELECT結果)
リリースノートに準拠した影響調査
MySQLの公式リリースノートを確認し、システムに影響がある変更を洗い出す作業です。
調査項目の例
- 非推奨になった関数・構文 → 使っていないか確認
- デフォルト値の変更 → 既存動作に影響ないか確認
- パフォーマンス変更 → 遅くなる可能性のあるクエリの特定
- 新機能 → 活用できるものがあるか検討
成果物イメージ
| リリースノート項目 | 影響有無 | 影響箇所 | 対応要否 |
|---|---|---|---|
| utf8mb4がデフォルトに変更 | なし | – | 不要 |
| GROUP BY の動作変更 | あり | 物件検索API | 要修正 |
アクション
- MySQL 8.4のリリースノートを確認
- 8.0 → 8.4の非互換性リストを確認
- Deprecated Features
- Removed Features
- 御社システムで使用している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」という名前で出力されます。コンソール出力でも原因が掴めない場合は、ここに出力される詳細なスタックトレースを確認してください。