先日、MySQL ACE と MySQL Rockstar の皆さんとのディスカッションで、もっともな質問がありました。あるサポート対象の MySQL LTS リリースでバグが修正されたのに、なぜ別のLTS リリースでは必ずしも修正されないのか?という質問です。

まず簡単におさらいしましょう。LTSとはLong-Term Support(長期サポート)のことです。LTSシリーズでは、MySQLは機能セットとデータ形式の安定性を維持しながら、バグ修正やセキュリティ修正を提供することを目指しています。この安定性によって、同じ系列内でのアップグレード、ダウングレード、クローン作成といった選択肢が維持されます。Innovationリリースでは、新機能や動作変更が導入される場合があり、新しいLTSリリースが公開された後もInnovationサイクルは継続します。

MySQL 8.4 と MySQL 9.7 はどちらも LTS リリースです。しかし、両系列に適用されるコード変更がすべて同じになるわけではありません。

LTS のメンテナンスに含まれるもの

四半期ごとの MySQL メンテナンスリリースには、セキュリティ修正とセキュリティ以外のバグ修正が含まれる場合があります。これにより、ユーザーは選択したLTSシリーズ内で定期的にバグ修正を適用できます。ただし、あるシリーズに修正が入ったからといって、同じ変更が自動的に他のすべてのシリーズにも適用されるわけではありません。詳しくはMySQL のリリースモデルに関する記事を参照してください。

LTSシリーズ間で修正内容が異なる理由

あるシリーズのリリースノートに修正が記載されていても、れだけで別のシリーズにも同じ問題が存在するとは限りません。仮に同じ問題が存在していたとしても、関連するコードや動作が異なる場合があります。また、問題を解決する変更が、既存の動作を前提としているアプリケーションに影響することもあります。LTS リリースのメンテナンスでは、こうした影響を考慮する必要があります。

このことがより具体的に分かる最近の事例を見てみましょう。

事例:InnoDB の修正とアプリケーションの互換性

あるInnoDBの修正では、潜在的なデッドロックを防ぐために行サイズの計算方法が改善されました。一方で、一部の CREATE TABLE 文と ALTER TABLE 文に対する検証がより厳格になりました。その結果、以前の MySQL 8.4 リリースでは動作していた SQL が、「Row size too large」というエラーで失敗する可能性が生じました。多数の顧客環境にソフトウェアを導入しているソフトウェアベンダーも影響を受け、他の顧客にも影響がありました。このリグレッションは Bug #120323 として報告されました。

開発チームは両方の問題に対処する方法を検討しました。MySQL 8.4.11 では、デッドロック防止に必要な計算方法は維持しつつ、大部分のDDL操作について以前の検証動作を復活させました。一部の操作では、引き続きより厳格なチェックが必要です。8.4.11 のリリースノートでは、Bug #39249507 としてこの問題の解決について説明し、元のデッドロック修正である Bug #39129182 も参照されています。

影響を受けた別の顧客では、自社プラットフォーム向けにこの修正を含む個別ビルドが必要でした。顧客によるテストと検証が完了した後、この互換性に関する変更を標準のMySQL 8.4.11リリースに取り込みました。

この事例から分かるように、単純に「修正をバックポートする」か「修正しない」という二択では決められないケースがあります。デッドロック保護を維持しつつ、LTSシリーズですでに稼働しているアプリケーションへの影響にも対処する必要がありました。

セキュリティアップデートとの関係

Oracle社が四半期ごとに実施する Critical Patch Updateサイクルが、MySQL のメンテナンスリリースの基本的なサイクルです。これらには、セキュリティ以外のバグ修正も含まれる場合があります。Critical Security Patch Update は、四半期ごとのリリースの間に発生した重大なセキュリティ問題や安定性の問題へ対して、必要に応じた対応するための手段です。この手段によって、通常のバグ修正を LTS シリーズ間でどのように扱うかが決まるわけではありません。詳しくはMySQL のリリースモデルに関する記事を参照してください。

特定のケースについて問い合わせるには

ある MySQL リリースには修正が含まれているのに、利用中の LTS リリースには含まれていない場合は、まず使用しているシリーズのリリースノートを確認し、Bug番号、MySQL Serverのバージョン、そして発生している影響を共有してください。再現可能な例があると、特に役立ちます。

MySQL Community GitHub Discussions での公開ディスカッションに参加するか、サブスクリプション契約のお持ちのお客様はサポート窓口を通じてお問い合わせください。新たなバグを発見した場合は、MySQL Bugs データベースに報告し、その報告へのリンクをGitHub Discussionに記載してください。

具体的な事例をぜひお寄せください。そうした情報があれば、特定の修正内容がリリース間で異なる理由について、より適切に回答するための手がかりになります。

いつも MySQL をご利用いただき、ありがとうございます!