[アップデート] Amazon RDS のデータベースプレビュー環境で MySQL 9.7(Long-Term Support)を評価出来るようになりました
いわさです。
Amazon RDS のプレビュー環境では MySQL の最新バージョンを評価目的で使うことが出来ます。
以前はイノベーションリリースである MySQL 9.2 の評価方法を紹介しました。
MySQL のリリースモデルには「Innovation」と「LTS(Long-Term Support)」の2つのトラックがあります。
Innovation リリースは四半期ごとにリリースされ新機能が積極的に追加されますが、サポート期間は短めです。
一方 LTS リリースは長期サポートが提供される安定版で、MySQL 8.4 が最初の LTS でした。
今回 MySQL 9.7 が新たな LTS リリースとしてリリースされ、イノベーションリリース(9.1〜9.6)で導入された機能がまとめて取り込まれています。
先日のアップデートで、Amazon RDS のデータベースプレビュー環境で MySQL 9.7 を評価出来るようになりました。
MySQL 9.7 では Hypergraph Optimizer の Community Edition 対応や、日付関連関数の一貫性向上、いくつかのシステム変数の削除など多くの変更が含まれています。
今回こちらを確認してみたので紹介します。
実際に確認してみる
インスタンスの作成
作成方法は簡単で、RDS コンソールからオレゴンのプレビュー環境に遷移できるので、そこでエンジンバージョンを指定するだけです。
プレビュー環境の場合、エンジンバージョンに MySQL 9.7.0 が選択できるようになっていました。

プレビュー環境には注意事項がいくつかありますので利用にあたってご注意ください。
- 作成後60日で削除される
- サポートを受けることはできない
- 本番環境へのスナップショットコピーは不可
- クロスリージョンレプリカ、RDS Proxy などいくつかの機能はサポートされていない
接続してバージョンを確認
パブリックアクセスを有効にして起動後、ローカルクライアントから接続してみます。
% mysql -h hoge0724mysql97.ca0mg86saazc.us-east-2.rds-preview.amazonaws.com -u admin -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 9.7.0 Source distribution
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
MySQL 9.7.0 ですね。ちなみに RDS MySQL は Community Edition になります。
mysql> SHOW VARIABLES LIKE 'version%';
+-------------------------+---------------------+
| Variable_name | Value |
+-------------------------+---------------------+
| version | 9.7.0 |
| version_comment | Source distribution |
| version_compile_machine | aarch64 |
| version_compile_os | Linux |
| version_compile_zlib | 1.3.1 |
+-------------------------+---------------------+
5 rows in set (0.20 sec)
Hypergraph Optimizer を試してみる
MySQL 9.7 の目玉機能として、Hypergraph Optimizer が Community Edition で利用可能になりました。
Hypergraph Optimizer は MySQL が開発を進めている新しいクエリオプティマイザで、従来のオプティマイザよりも複雑な JOIN を含むクエリで効率的な実行計画を生成できるとのことです。
optimizer_switch にオプションが存在していることは確認できます。
mysql> SELECT @@optimizer_switch LIKE '%hypergraph%';
+----------------------------------------+
| @@optimizer_switch LIKE '%hypergraph%' |
+----------------------------------------+
| 1 |
+----------------------------------------+
1 row in set (0.20 sec)
デフォルトでは hypergraph_optimizer=off になっているので、有効化してみましょう。
mysql> SET optimizer_switch='hypergraph_optimizer=on';
ERROR 3999 (42000): The hypergraph optimizer does not yet support 'this build configuration; to enable it, build with CMake option WITH_HYPERGRAPH_OPTIMIZER=ON'
残念ながら、RDS プレビュー環境のビルド構成では Hypergraph Optimizer が有効化できないようです。
CMake の WITH_HYPERGRAPH_OPTIMIZER=ON オプション付きでビルドされている必要があるみたいですね。
RDS の一般提供(GA)時にどうなるかは不明ですが、現時点のプレビュー環境では試すことができませんでした。
日付関連関数の改善を確認
MySQL 9.7 では日付・時刻関連の関数で多くのバグ修正が行われています。
境界値やエッジケースでの一貫性が向上しているので、いくつか確認してみます。
まず TIMEDIFF() について、DATETIME と DATE を組み合わせた場合に正しい結果を返すようになっています。
また、無効な値が渡された場合には NULL を返すようになりました。
mysql> SELECT TIMEDIFF('2025-07-24 10:30:00', '2025-07-24') AS timediff_result;
+-----------------+
| timediff_result |
+-----------------+
| 10:30:00 |
+-----------------+
1 row in set (0.20 sec)
mysql> SELECT TIMEDIFF('invalid', '2025-07-24') AS timediff_invalid;
+------------------+
| timediff_invalid |
+------------------+
| NULL |
+------------------+
1 row in set, 1 warning (0.19 sec)
次に FROM_DAYS() の境界値処理です。
範囲外の値に対する処理が一貫したものになり、0 以下の値には NULL が返されるようになっています。
mysql> SELECT FROM_DAYS(-1) AS negative, FROM_DAYS(0) AS zero, FROM_DAYS(1) AS one, FROM_DAYS(365) AS d365, FROM_DAYS(366) AS d366;
+----------+------+------------+------------+------------+
| negative | zero | one | d365 | d366 |
+----------+------+------------+------------+------------+
| NULL | NULL | 0000-01-01 | 0000-12-31 | 0001-01-01 |
+----------+------+------------+------------+------------+
1 row in set (0.19 sec)
日付演算のオーバーフロー処理も確認してみます。
リリースノートによると、日付の演算結果が範囲外になった場合のオーバーフロー処理が改善されたとのことです。
mysql> SELECT DATE_ADD('9999-12-31', INTERVAL 1 DAY) AS overflow_date;
+---------------+
| overflow_date |
+---------------+
| NULL |
+---------------+
1 row in set, 1 warning (0.19 sec)
mysql> SELECT DATE_ADD('9999-12-31 23:59:59', INTERVAL 1 SECOND) AS overflow_datetime;
+-------------------+
| overflow_datetime |
+-------------------+
| NULL |
+-------------------+
1 row in set, 1 warning (0.19 sec)
9.7 では範囲外の結果に対して一貫して NULL が返されることが確認できます。
削除されたシステム変数
MySQL 9.7 ではいくつかのシステム変数が削除されています。
公式のリリースノートによると、replica_parallel_type と group_replication_allow_local_lower_version_join が削除されたとのこと。
実際に確認してみます。
mysql> SHOW VARIABLES LIKE 'replica_parallel_type';
Empty set (0.20 sec)
mysql> SET GLOBAL replica_parallel_type = 'LOGICAL_CLOCK';
ERROR 1193 (HY000): Unknown system variable 'replica_parallel_type'
replica_parallel_type は完全に削除されていますね。
MySQL 8.0 時代にレプリケーションの並列適用方式を指定するために使われていた変数です。
この変数を参照しているスクリプトや設定がある場合はエラーになるので注意が必要です。
FLUSH PRIVILEGES の非推奨状態
以前の記事で MySQL 9.2 で FLUSH PRIVILEGES が非推奨になったことを紹介しましたが、9.7 ではどうなっているか確認してみます。
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected, 1 warning (0.19 sec)
mysql> SHOW WARNINGS;
+---------+------+---------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+---------------------------------------------------------------------------+
| Warning | 1681 | 'FLUSH PRIVILEGES' is deprecated and will be removed in a future release. |
+---------+------+---------------------------------------------------------------------------+
1 row in set (0.19 sec)
9.7 でもまだ非推奨(Warning)の状態で、削除はされていないみたいです。
近い将来のバージョンで削除されると思うので、使っている処理がある場合は引き続き見直しを検討しておきましょう。
innodb_log_writer_threads のデフォルト動作変更
MySQL 9.7 では innodb_log_writer_threads のデフォルト値の決定ロジックが変更されています。
バイナリログの有効/無効と、論理 CPU 数に応じてデフォルトが決まるようになったとのこと。
RDS プレビュー環境で確認してみます。
mysql> SHOW VARIABLES LIKE 'innodb_log_writer_threads';
+---------------------------+-------+
| Variable_name | Value |
+---------------------------+-------+
| innodb_log_writer_threads | OFF |
+---------------------------+-------+
1 row in set (0.20 sec)
mysql> SHOW VARIABLES LIKE 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.19 sec)
プレビュー環境では log_bin=OFF で、CPU 数が 4 以下のインスタンスを使っているため、新しいロジックに従って innodb_log_writer_threads=OFF になっています。
新しいデフォルト値の決定ロジックは以下のようになっているとのことです。
If binary logging is enabled (log_bin is ON) and the number of logical CPUs available is 32 or more, innodb_log_writer_threads defaults to ON; if binary logging is disabled and the number of CPUs available is greater than 4, it (also) defaults to ON; in all other cases, the default value of innodb_log_writer_threads is OFF.
さいごに
本日は Amazon RDS のデータベースプレビュー環境で MySQL 9.7(Long-Term Support)を評価出来るようになったので確認してみました。
MySQL 9.7 は 8.4 に続く LTS リリースということで、イノベーションリリース(9.1〜9.6)で導入された機能がまとめて入った安定版という位置付けですね。
Hypergraph Optimizer は RDS プレビュー環境のビルドでは有効化できなかったのが残念ですが、GA 時に対応されると嬉しいなぁ。
日付関連関数の一貫性向上は地味ですが、エッジケースで予期しない挙動に遭遇するリスクが減るのは良いですね。
MySQL 9.7 を一時的に検証したい方は手軽に使えるのでプレビュー環境を試してみてください。







