ちょっと硬派なコンピュータフリークのBlogです。

カスタム検索

2024-05-13

MySQL 8.4 LTS登場!!

記事を書くのが遅くなってしまったが、先日MySQL 8.4シリーズが登場したので紹介をしておこうと思う。新機能の解説については機会を改めて書くとして、今回は主にアップグレードにまつわる重要なポイントを書き記しておく。

LTS = Long Term Support

以前の記事でも紹介した通り、MySQL 8.4はLTS = Long Term Supportのバージョンとなっている。長期間サポートするために互換性を最大限保証するバージョンである。前のメジャーバージョンであるMySQL 8.0シリーズのように、シリーズの途中で互換性が破壊されるような変更が入ることは基本的に無い。「バグ修正のためにどうしても仕様を変えなければならない」というような事態が生じる可能性はゼロではない。なので絶対に互換性が保たれるとは言い切れないところであるが、基本的には仕様変更はない方向で今後リリースされていくことになる。

アップグレード・ダウングレード・レプリケーション・クローンの互換性

LTSにおいては、マイナーバージョンが異なってもシリーズ内でアップグレード・ダウングレード・レプリケーション・クローンが可能となる。MySQL 8.0シリーズではサポートされていなかったインプレース方式のダウングレードや、異なるバージョン同士でのクローンが可能な点も見過ごせない。MySQL 8.4シリーズでのバージョン互換性については、下記のマニュアルを参照して欲しい。
このような互換性が保たれるには、データのフォーマットやシステムテーブルの定義、プロトコルなどに変更がないことを意味している。MySQL 8.0シリーズまでとは異なり、MySQL 8.4では互換性が保証されていたりインプレース方式のダウングレードができたりするため、より気軽にアップグレードすることができるだろう。

この点についてはむしろMySQL 8.0シリーズのやり方が良くなかったように思う。新機能をいち早くリリースするために同一メジャーバージョン内でどんどん新機能を追加するというやり方は、開発にもユーザーにも混乱を招くやり方でしかなかった。製品をリリースされている皆さんはどうか同じ轍を踏むことのないように注意して頂きたい。

MySQL 8.4のサポート期間

Long Term Supportと銘打ってはいるものの、基本的には他のオラクル製のソフトウェアと同様というだけである。5年のPremier Support期間と3年のExtended Support期間があり、合計で8年間は修正版(パッチ)のリリースが保証されている。その後はSustaining Supportというフェーズに移行し、基本的に修正版のリリースは行われない。オラクルが提供するソフトウェア製品のサポート期間については、こちらのページを見て欲しい。

MySQL 8.4のリリース日が2024年4月30日なので
  • Permier Support → 2029年4月30日まで
  • Extended Support → 2032年4月30日まで
  • Sustaining Support → 無期限
ということになる。

MySQL 8.1、8.2、8.3のサポート期間

これらのサポート期間は既に終了している。Innovation Releaseは、基本的に次のInnovation ReleaseもしくはLTSがリリースされた時点でサポート期間は終了する。というわけでこれらのバージョンを利用している人については、できるだけ早めにLTSへの移行を検討して欲しい。

MySQL 8.0のサポート期間

MySQL 8.0シリーズは現在Premier Support期間となっている。なかなか次のメジャーバージョンがリリースできないという失態を犯してしまったための措置でそうなったという経緯があり、Premier Support期間が2年延長されたのだ。そのため、本来は正式版リリースが2018年4月だったMySQL 8.0は2023年4月でPremier Support期間が終わるはずだったのだが、2025年4月までとなっている。ただしExtended Support期間の終了日は変更されず、2026年4月で終わる点に注意して欲しい。その後はSustaining Support期間へと移行するのでもう修正版は出ない。それまであと2年しかないので、ぜひ移行の計画は早めに立てて欲しいと思う。

なお、MySQL 8.0シリーズの今後の扱いについてであるが、新機能をいち早く届けるという役割は終えたのでバグ修正のみが行われる予定だ。そのため、LTSと同じようにアップグレードやグループレプリケーション(8.0.35〜)、クローン(8.0.37〜)の互換性が担保されることになる。これまでのMySQL 8.0シリーズはバージョンアップが不便すぎたが、今後はそのような不便は無いだろう。

今後のInnovation Releaseのバージョンは?

順当に行けば次のInnovation Releaseは7〜8月頃に9.0としてリリースされることだろう。こちらのプロダクトマネージャのブログ記事にも書いてあるように、四半期ごとにInnovation Releaseを出したいとのことなので、計画通りに事が進めばそのようになるはずだ。以下は該当箇所の引用である。

The current cadence goal is to have an Innovation release every quarter, incrementing the minor version number (eg. 8.2, 8.3, etc.). Patch releases within Innovation releases are possible but are less likely to happen.
9.0の次は9.1、9.2・・・と続く。LTSは2年ごとの区切りで、そのときの最新のマイナーバージョンがLTSとしてリリースされる予定だ。9.0から始まって四半期ごとにマイナーバージョンが増えるので、そのペースで2年後まで計画通りにリリースされれば9.7がLTSになるだろう。9.xのLTSの次はまた10.0がInnovation Releaseとしてリリースされ・・・というサイクルが続いていくことになるはずだ。たぶん。

リリースのサイクルについては、線表が先のプロダクトマネージャのブログ記事に記されてあるのでそちらを参照してほしいと思う。

周辺プロダクトについて

いくつかの周辺プロダクトについては、MySQL 8.0シリーズが最後のリリースとなっている。ご愛顧頂いている方には申し訳ないのだが、以下のプロダクトについてはMySQL 8.0で打ち止めとなっている。
  • MySQL Workbench
  • MySQL Connector/Node.js
  • MySQL Enterprise Monitor
MySQL Enterprise Monitorに関しては商用版オンリーの製品だったが、便利なので愛用者も多いように思う。マニュアルにもEOLのお知らせが載っているので、利用していた人は一読しておいて欲しい。今後は代替のソリューションとしてEnterprise Manager for MySQLで置き換えられる形になる。

コネクタ(ドライバ)のバージョンについても混乱がありそうなので言及しておく。改めて言及しておくと、Node.js向けコネクタは8.0で打ち止めになった。それ以外の各種コネクタについては今後もリリースされていく予定だが、コネクタ類にLTSとInnovation Releaseの区別はなく、Innovation ReleaseとLTSのバージョンのうち最も新しいものに追随する形で新バージョンが順次リリースされていく。そのため、コネクタは8.0としての更新は既に終了しており、8.0の最終バージョン(ODBC用だけ8.0.36まで、それ以外は8.0.33まで)のあとは8.1.0→8.2.0→8.3.0→8.4.0(→9.0.0)というのが正式な後継バージョンということになっている。このナンバリングはMySQL Server側とコネクタのバージョン番号を揃えるための措置だが、Innovation ReleaseとLTSの区別がないという点がなんとも分かりづらいので注意して欲しい。コネクタはInnovation Releaseと同じバージョンでもそれが唯一の最新バージョンなのである。機能追加およびバグ修正は、いずれも最新バージョンで行われていくことになる。

MySQL Server 8.4の新機能について

MySQL Server 8.4の新機能(MySQL 8.0からの差分)については下記のページにまとめられている。

1.4 What Is New in MySQL 8.4 since MySQL 8.0

このページを見て「なんか新機能少ないな・・・」と感じた人も多いのではないだろうか。それもそのはずで、MySQLは8.0シリーズでさんざん新機能追加をやってきた。8.0以降のInnobation Releaseは8.1〜8.3の3つしかない。さらに8.4を入れると、約10ヶ月間で4つのバージョンをリリースして、その間に追加された新機能が8.4シリーズの新機能ということになる。開発期間が短かった分、必然的に新機能も少ないのである。とはいえ、新機能が少ないことは悪いことばかりではない。MySQL 8.0の最終バージョンとの差分も控えめなので、MySQL 8.0からの移行のハードルも割と低くなっていると思う。

既にいろいろなところで言われているが、mysql_native_passwordがデフォルトで無効化されている点には注意して欲しい。プラグイン自体が削除されているワケではないので、 my.cnfの[mysqld]セクションにmysql_native_password=ONを書いておけばmysql_native_passwordプラグインはまだ利用可能だ。マニュアルにも書いてある通り、将来のバージョンで削除されることになっているので、9.0以降でも存在しているかについては不明だ。 とはいえ、8.4はこれから8年間サポートされるので、移行の猶予はそれなりにある状態ではある。mysql_native_passwordはハッシュの強度が弱いので、可能であればcaching_sha2_passwordへの以降を検討して欲しい。(将来のバージョンでもどうしても必要だという人は自分で移植するという手もある。MySQLはオープンソースだからね!)

問題のある用語を削除する一貫として、8.4ではついにMASTERおよびSLAVEのつくコマンドが全廃された。古いコマンド名を前提にしているプログラムは動かなくなるので注意して欲しい。
  • 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
  • SHOW MASTER LOGS →SHOW BINARY LOGS
  • START SLAVE → START REPLICA
  • STOP SLAVE → STOP REPLICA
  • SHOW SLAVE STATUS → SHOW REPLICA STATUS
  • SHOW SLAVE HOSTS → SHOW REPLICAS
  • RESET SLAVE → RESET REPLICA
やはりRESET BINARY LOGS AND GTIDSは長すぎると個人的に思う。もう少しどうにかならなかったのか・・・。

InnoDBの各種デフォルト値が変わっている点も注意して欲しい。コンピュータハードウェアの進化に合わせ、より速いCPUと多くのCPUコア、大きなメモリ、速いディスクを持つシステムに追従する形になっている。チェンジバッファと適応ハッシュインデックスが無効化されており、innodb_io_capacity(200→2000)およびinnodb_log_buffer_size(16M→64M)が増強されている辺りの影響が大きそうだ。innodb_io_capacityの増加は、ディスクの主流が完全にHDDからSSDになったことを受けたものである。SSDもピン切りなので、高速なSSDを用いている場合には、innodb_io_capacityをもっと高くしたほうが良いだろう。いくつにすべきというのはベンチマークなどをして確かめなければわからない。スタート地点として、ディスクのIOPSの2割程度から開始してみてはいかがだろうか。

MySQL Server本体ではないが、MySQL ShellについてはデフォルトのモードがJavaScriptからSQLに変更されているので注意して欲しい。InnoDB Clusterの管理などのタスクはJavaScriptあるいはPythonのモードで行う必要がある。従来からのmysqlコマンドの代替を目指すなら、デフォルトはSQLモードが良いのかも知れない。デフォルトのモードをアテにしてスクリプトからmysqlshを呼んでいる場合には、スクリプトがちゃんと動かなくなるかも知れないので注意して欲しい。とはいえ、mysqlshにはコマンドから各種機能を呼び出すためのインターフェイスがあり、それを使っている場合には問題はないだろう。--execute(短縮形は-e)オプションでコマンドを呼び出している場合には気をつけて欲しいが、解決策としては先のインターフェイスへの移行を検討して欲しい。

なお、InnoDB Clusterを利用しているユーザーについては、以前の記事で述べたようにInnoDB Clusterに対してリードレプリカを追加できるようになっているので、ぜひアップグレードしてその機能を利用してほしいと思う。

まとめ

MySQL 8.4はMySQLにおいて初のLong Term Supportのリリースとなった。MySQL 8.4シリーズでは8.0のときのようにシリーズの途中で機能が追加されるということはなく、安心して長期間利用できるようになっている。ぜひMySQL 8.4シリーズへアップグレードして、今後は安心して利用して欲しい。

0 コメント:

コメントを投稿