[アップデート] Amazon RDS のデータベースプレビュー環境で MySQL 8.2 を評価出来るようになりました

2024.02.01

いわさです。

先日、Amazon RDS プレビュー環境にて MySQL 8.2 が利用出来るようになっていました。

MySQL 8.2 はイノベーションリリースです。詳しくはプレビュー環境での MySQL 8.1 を紹介した次の記事を参照頂ければと思いますが、LTS と LTS の間で何度か行われる機能強化リリースです。

おそらく次期 LTS は 8.4 となり、その際に RDS for MySQL の新しいエンジンバージョンとして使えるようになるはずですが、このプレビュー環境を通して 8.4 にリリースされるであろう新機能をテストしたり影響の確認をすることが出来ます。

なお、お約束となりますがプレビュー環境の利用にあたっては通常と前提条件が違っていたり制約があったりしますので以下の公式ドキュメントに必ず従ってください。

MySQL は 8.1 と 8.2 が選択可能に

本日時点では次のようにエンジンタイプとして Amazon Aurora、MySQL、PostgreSQL、Oracle が選択出来て、MySQL の場合は 8.1.0 と 8.2.0 が選択可能です。

ちょっと前までは Oracle と PostgreSQL だけだった気がしますが、結構増えてきましたね。
MySQL 8.2.0 の場合でもコンソール上で特に設定内容に変更はありません。

MySQL 8.2 の変更履歴

ちなみに、MySQL 8.2 のリリースノート内に変更履歴が記載されています。
機能的な変更点や修正されたバグ内容などが記載されています。

なお、確認した限りではバグの修正については 8.2.0 で直されたタイミングで 8.0.35 にも既に適用済みのものが多いです。
評価する際は特に非推奨に移行されたものや、非推奨状態から削除されたものもあるので、それらは一通りチェックしておくと良いと思います。
例えば、既に非推奨であったexpire_logs_days変数は今回削除されているので参照している場合はエラーが発生するようになります。

実際に MySQL 8.2 で作成し 8.0.34 と挙動の差を比較してみた

今回は実際に MySQL 8.2 でプレビュー環境を作成し、上記リリースノートのうちSTR_TO_DATE関数で範囲外の日付でも使えちゃうぜというバグが修正されているので、そちらを試してみます。

SQL Function and Operator Notes
The STR_TO_DATE() function did not perform complete range checking on the string to be converted, so that it was possible to pass to it a string which would yield an invalid date, such as '2021-11-31'. (Bug #108782, Bug #34704094)

もう少し 8.2 ならではの派手なやつを試せるとわかりやすかったのですが認証周りになっちゃいそうなので、今回は面倒すぎてやめました。

8.0.34

通常のリージョンで MySQL 8.0.34 を作成し、str_to_dateを使ってみます。
次のように不正な日付が取得されていますね。

% mysql -h hoge0201mysql8034-2.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -u admin -p 
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 8.0.34 Source distribution

Copyright (c) 2000, 2023, 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> select str_to_date('2021-11-31', '%Y-%m-%d');
+---------------------------------------+
| str_to_date('2021-11-31', '%Y-%m-%d') |
+---------------------------------------+
| 2021-11-31                            |
+---------------------------------------+
1 row in set (0.19 sec)

mysql>

8.2.0

続いて、プレビュー環境の 8.2.0 へ接続してみます。

% mysql -h hoge0124mysql.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 9
Server version: 8.2.0 Source distribution

Copyright (c) 2000, 2023, 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.

上記からサーバーバージョンが 8.2.0 であることが確認出来ますね。
先程と同様にstr_to_dateの動作も確認してみましょう。

mysql> select str_to_date('2021-11-31', '%Y-%m-%d');
+---------------------------------------+
| str_to_date('2021-11-31', '%Y-%m-%d') |
+---------------------------------------+
| NULL                                  |
+---------------------------------------+
1 row in set, 1 warning (0.18 sec)

日付の取得に失敗しました。警告も発生していますね。確認してみます。

mysql> show warnings;
+---------+------+-----------------------------------------------------------------+
| Level   | Code | Message                                                         |
+---------+------+-----------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '2021-11-31' for function str_to_date |
+---------+------+-----------------------------------------------------------------+
1 row in set (0.27 sec)

mysql>

2021-11-31が日付の値として正しくないというチェック結果を確認出来ました。

さいごに

本日は Amazon RDS のデータベースプレビュー環境で MySQL 8.2 を評価出来るようになったので確認してみました。

次期 LTS に向けて早めに変更点の評価を行いたい方などは利用してみてください。
ちなみに MySQL 界隈にあまり明るくないのですが、MySQL 8.2 の変更内容に関する反応ってどんな感じなのでしょうか。
大型な機能強化がされている印象はないのですが、それだけ安定しているということですかね。