2025年4月、MySQLの最新LTS(Long Term Support, サポート期間5年)であるMySQL 8.4系列の最新版としてMySQL 8.4.5がをリリースされました(MySQLは「リリース系列」としてバージョン番号の上2桁を用いてドキュメントやバイナリをグループにしています。セマンティックバージョンではありません)。
同じ日に1世代前の系列であるMySQL 8.0.42, Innovation Releaseと呼ばれる短期サポート(サポート期間3か月)のMySQL 9.3.0もリリースされています。
今回はこの3つのバージョンの違い、今ならどれを選んでどう使っていくかについて、筆者の調べ方、考え方を紹介していきます。
MySQL 8.0.42
まずは古い方からいってみましょう、MySQL 8.0.42のリリースノートを見てみる…前に少しMySQL 8.0について背景を説明しておきます。
MySQL 8.0は長いことMySQLを使い続けている筆者にとってもつらいバージョンでした。通常(MySQL 5.7とそれ以前の系列はそうでした)リリース系列は「開発版やアルファ, ベータ版」「リリース候補版」を経て「一般公開版」がリリースされます。一般公開後は新機能の追加はされず、不具合のFixやセキュリティFixなどのメンテナンスのみが適用され、同一系列内のMySQL同士は互換性の問題もありませんでした。しかし、8.0系列は(筆者の推測ですが)「開発した新機能をできるだけ早くユーザーに届ける」ためにか一般公開版になっても新機能追加が止まらず、それは開発元のブログで「メンテナンスリリースで追加された新機能」を自嘲的に(?)紹介するほどに、それまでの一般的な「一般公開版」とは違うリリーススタイルをしていました(筆者はこの頃、MySQLのコミュニティマネージャーに「まるでWindows 10だ」と伝えたことがあります)。新規機能は追加され、もっと慎重に行われるべき機能の廃止も積極的に行われました。
MySQLはソフトウェアです。ソフトウェアである以上、必ずどこかにバグがあります。バグ曲線として知られるように、コードが作成された直後が一番未発見のバグが多く、時間の経過による発見と修正を経て未知・未修整のバグが少なくなっていきます。不定期に新機能をリリースするということは、不定期にコードが作成・追加されるということです。実際、MySQLのバグレポートシステムである bugs.mysql.com には新機能が追加されるたびにその周辺でバグの報告が上がるようになっていました。同じ8.0系列の8.0.xから8.0.yにバージョンを上げるだけでも、新しい致命的な不具合がないか、非互換になった機能はないかを検討する必要があったのです。これは運用上非常に問題で、セキュリティFixのために新しいパッチバージョンを採用しようとしてもその間にバグが含まれていた場合はパッチバージョンを上げにくい、複数のパッチバージョンがプロダクション環境に存在してしまうと、「こっちのホストではこの機能が使えるがこっちのホストでは使えない」のようにオペレーションの均一化ができなくなってしまいます。結果として、それぞれ自分で選んだ「その時点で一番問題のないパッチバージョン」を「社内LTS」として塩漬けしてしまい、その後のバージョンアップは見送る戦略をとるユーザーが増えました。
ユーザーの不満に気が付いたのか、MySQL 8.0リリースから5年以上が経った8.0.34にして遂に「機能追加を停止し、今後の8.0系列はバグ修正トラックへと移行する」という声明が出されました。もっと早く気が付いてほしかった。
しかして、8.0.42にはFix以外の情報が含まれていないはずですが、この7年間ですっかり疑い深くなってしまった筆者は「またこっそり何か追加していないか」を疑う癖がついてしまったのでした。リリースノートを見ていきましょう。
SQL Function and Operator Notes
に Important Change
の表記がありますが、これは既存のバグを修正して動作が変わった(以前はエラーにならずに壊れていたものが、壊れるケースではエラーを出して強制終了するようになった、強制終了するかどうかはオプションにて変更可能)ということなのでバグ修正で良さそうです。Functionality Added or Changed
にリストされているものも、OpenSSLのバージョンが変わったことだったりパフォーマンス低下の修正だったりデバッグビルド関連のものなので大丈夫そうです。Bugs Fixed
は本当にFixされたバグの情報でしょう。ざっとだけ目を通しましたが、この段落まで疑うようになっては世も末です。
上記の通り本当に8.0系列はバグ修正トラックに入ったらしく、ここ2年程度8.0系列に新規で追加された機能はほぼありません(前述のようなバグ修正のために追加されたオプションや、削除まではされなくとも非推奨になったもの、コマンドラインクライアントに対する軽微な追加(!!)はあります)。
MySQL 8.4.5
続いて8.4.5ですが、長いこと8.0系列がメインストリームだったため、まだ8.4系列を評価していない人もいるでしょう。なので先にドキュメントの What Is New
を軽くおさらいします。
以前からあったパラメータのデフォルト値の変更に加え、 mysql_native_password
がデフォルトで無効化されたこと、レプリケーション関連の用語が変更されたこと、その他機能が追加されたことが確認できます。追加された機能としては8.0系列の「それをパッチバージョンで追加しますか⁉」のような大きな変更は(リリース系列が分かれているのに)ほぼなく、少し物足りない感じすらします。8.4系列はリリース時からLTSトラック = バグ修正トラックとしてマークされているので、これ以上新機能・非互換が増える心配はないはずです。
リリースノートの内容は8.0.42のものとほぼ同じで、やはり新しい機能が追加されている気配はありません。開発元はちゃんと約束を守っているようです。
MySQL 9.3.0
最後にMySQL 9.3.0についてです。MySQL 9.3.0はサポート期間が3か月(MySQLはほぼ3か月に1回のリリースなので、つまりは「最初で最後の9.3系列のリリース」です)のInnovation Release版であり、こちらには新規機能がふんだんに盛り込まれているはずです。
8.0.42, 8.4.5と同様の内容も含まれてはいますが、 Deprecation and Removal Notes
に記載があるように、非推奨とマークされていたいくつかのオプションが無効化されているあたりがLTSトラック = バグ修正トラックとは違うところです。なおこのリリースノートは 9.2.0(同じくInnovation Releaseであり、既にサポート終了) からの差分であるため、LTSの8.4との差分はもう少し積みあがっているでしょう。ただし、8.4系列の「次のLTS」 (確定した番号ではありませんが、9.7系列がそうなることが推測されています) には現在の What Is New in MySQL 8.4 since MySQL 8.0
と同様に What Is New in MySQL 9.7 since MySQL 8.4
というドキュメントが作成されることが期待できるため、今すぐ急いでInnovation Releaseの全てをキャッチアップする必要はないと考えています。
これからのMySQLバージョン戦略
ここまで、現在サポートが有効な3つのバージョンのリリースノートと、それぞれのリリース系列を取り巻く概況をざっと説明してきました。その上で、これからMySQLユーザが取るべき(と筆者が思っている)バージョンアップ戦略を考えたいと思います。
以下の図は2025年5月現在の各系列のEOLまでの表です。5.7系列は既にサポートを終了しており、これ以上パッチリリースはありません。8.0系列でも残り1年程度であり、2026年以降はメインラインとしては8.4系列と9.7系列(予測)の2系統のみが残ることになります。
系列 | リリース日 | サポート終了 |
---|---|---|
5.7 | 2015年10月 | 2023年10月(既にEOL) |
8.0 | 2018年4月 | 2026年4月 |
8.4 | 2024年4月 | 2032年4月 |
9.7(予測) | 2026年4月(予測) | 2034年4月(予測) |
コミュニティ版のMySQLはGPLv2 or laterでライセンスされているため、EOLがそのままMySQLサーバをシャットダウンしなければいけない期限ではありません。ライセンスに従い、自己責任で利用し続けることはできます(原文は THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
, サポート期間中であってもコミュニティ版を利用する場合は常に自己責任です)。しかし一般的に保守されないプログラムをそのまま使い続けることはリスクになります。
上記を踏まえ、筆者は以下のように考えています。
- 現在使用しているリリース系列によらず、今後1年以内に利用を終了する場合
- 現在使用しているリリース系列内の最新のパッチバージョンにアップデートの上で利用を続ける
- 今後1年以内に利用を終了する予定がなく、現在使用しているリリース系列が5.7またはそれ以前の場合
- 8.0系列の最新パッチバージョンにアップデート
- 5.7系列と8.0系列の間に非互換はあるが、これ以上非互換が増える可能性は低いため、一度バージョンアップの検証を済ませてしまえばそれ以降の8.0系列内でのバージョンアップは工数が少なくなるはず
- 8.0系列の最新パッチバージョンにアップデート
- 今後1年以内に利用を終了する予定がなく、現在使用しているリリース系列が8.0の場合
- 8.0系列の最新パッチバージョンにアップデート
- 8.0.34とそれ以前からアップデートする場合は8.0系列内でも動作が変わることがあるのでバージョンアップの検証が必要
- バグ修正トラック以降のバージョンを使っている場合は (最新にアップデートすることが望ましいものの) 省略することも可能
- 8.0系列の最新パッチバージョンにアップデート
- これから新規に利用を開始する場合
- 8.4系列の最新パッチバージョンを利用開始
- 新規利用であれば互換性を気にする必要はなく、EOLまで7年の猶予がある
- 8.4系列の最新パッチバージョンを利用開始
- ここまでの記述に従って8.0系列にバージョンアップした後に
- 8.4系列で削除される機能 (特に
mysql_native_password
が削除されるため、caching_sha2_password
にまつわる制約)を精査し、8.4系列へのバージョンアップが速やかに行えるように準備を開始する - 8.0系列はEOLまであと1年もありません
- 8.4系列で削除される機能 (特に
MySQLファンとしては非常に残念なことですが、8.0系列のリリースモデルは良いものではありませんでした。しかし8.0.34とそれ以降の8.0系列および8.4系列は (今のところは) 約束が守られて、5.7系列とそれ以前のように安心して利用できる状態になっていると考えられます。
7年も続いた8.0系列の体制に文句を言いたい気持ちはもちろんまだありますが、MySQLの開発状況と今後のリリースを考えるとあまり時間はありません。「8.4系列のために、または更にその後のLTSのために」「今、8.0系列の最新版を使う」ことをお勧めし、そして、筆者自身もそのように身の回りのMySQLを整理していきたいと思います。