🆙

AuroraとMySQLのバージョン管理モデルやライフサイクルを調べAurora MySQL v2からの移行先バージョンについて考えてみた

2023/12/18に公開

本日はコネヒトアドベントカレンダー18日目の記事です。

https://adventar.org/calendars/8994

こんにちは。冬場はよくスノーボードに行く sasashuuu です。

今シーズンはギアを新調して臨もうと思い、フリマアプリで手持ちのものを売り捌いているのですが、売ることばかりに注力してしまい新しいギアがまだ入手できていないため、まだシーズンインの準備が整っておりません()

今は KAZU KOKUBO PRO の型落ちモデルが欲しくてたまらないので、良いお値頃のものを探し求めております🏂

動機

最近、MySQL では8.1のリリースやバージョン管理モデルの変更発表がありましたよね。

Introducing MySQL Innovation and Long-Term Support (LTS) versions

一方、MySQL5.7 互換 のデータベースを提供する Amazon Aurora MySQL version 2(以降 version x は vx と略します) の EOL は来年(2024年)の10月に迫っています。

Amazon Aurora メジャーバージョンが利用可能な期間 より一部引用

データベースコミュニティのバージョン Aurora バージョン Aurora バージョンの標準サポート終了日までに
MySQL 5.6 (廃止) 1 2023 年 2 月 28 日
MySQL 5.7 2 2024 年 10 月 31 日
MySQL 8.0 3

当然互換性を提供しているので、Amazon Aurora MySQL v2 と MySQL5.7 は密接な関係にあります(その他各バージョンごとに互換性のあるものも同じく)。

そのような状況の中、両者のデータベースのそれらの関係性についてあまり深く理解していなかったこともあり、「直近で Aurora MySQL v2 から v3 へのアップグレードをするならマイナーバージョンは何を選んでおけば良いのだろう?」 とふと疑問に思ったので、調べてみようと思ったのが動機です。

前提

  • 本記事は2023年12月16日時点での情報となります。今後、本書で取り扱う製品の仕様などは変わりうる可能性があるので、ご注意ください
  • バージョン選定を行うにもいろいろな観点(いかに変更およびアップグレードが発生せず堅実に運用できるか、いかに新機能を素早く取り込んでいくことができるか、等々)があると思いますが、今回は安定運用に重きを置いて考えたいと思います

結論(自論)

先に結論(自論)を書いておくと下記の通りです。

  • 当面の間(MySQL8.x の LTS バージョン互換のものが出るまではひとまず)は基本的に、 v3 の LTS (Aurora MySQL 3.04.x)かつデフォルトバージョンを選んでおけば間違いなさそう(?)

Aurora MySQL のバージョン管理モデル

基本的に Amazon Aurora バージョン のドキュメントに詳細が書かれているのでそちらを参考にしました。ドキュメントの内容をかいつまんでいきたいと思います。

バージョンのスキームと MySQL との互換性

Aurora バージョンでは、major.minor.patch というスキームが利用されます。

mysql> select aurora_version(), @@aurora_version;
+------------------+------------------+
| aurora_version() | @@aurora_version |
+------------------+------------------+
| 2.08.1           | 2.08.1           |
+------------------+------------------+

このメジャーバージョンや、マイナーバージョンは MySQL のメジャーバージョンとマイナーバージョンにマッピングされていますが、MySQL のマイナーバージョンによっては Aurora に相当するものがない場合もあるそうです。

Amazon Aurora バージョン より一部引用

コミュニティメジャーバージョン Aurora メジャーバージョン
MySQL 5.6 (廃止) Aurora MySQL 1 (廃止)
MySQL 5.7 Aurora MySQL 2
MySQL 8.0 Aurora MySQL 3
Aurora MySQL バージョン 互換性のあるコミュニティバージョン
Aurora MySQL 2.07、2.11 コミュニティ MySQL 5.7.12 と互換性があります
Aurora MySQL 2.12 コミュニティ MySQL 5.7.40 と互換性があります
Aurora MySQL 3.01、3.02 コミュニティ MySQL 8.0.23 と互換性があります
Aurora MySQL 3.03 コミュニティ MySQL 8.0.26 と互換性があります
Aurora MySQL 3.04 コミュニティ MySQL 8.0.28 と互換性があります

パッチバージョンに関しては、初期のリリース後に追加されたマイナーバージョンに関する重要な修正を含むものであり、これに関しては特に MySQL とのマッピング等は言及されていませんでした。

上記の Aurora MySQL の各バージョンに関するリリース情報は Amazon Aurora MySQL 互換エディションのリリースノート を参考にするとよさそうです。

各バージョンのライフサイクル

デフォルトバージョン

Aurora にはデフォルトバージョンという概念があり、マイナーバージョンについて以前のバージョンと比較して大幅な改善が含まれている場合、デフォルトとしてマークされます。 デフォルトのバージョンはメジャーバージョンごとに年2回のリリースがあります。利用可能な期限については、後述するマイナーバージョンと同じように捉えてよさそう?かと思います。

下記は Amazon RDS コンソール画面でのデータベース作成時の例ですが、エンジンタイプで Aurora を選んだ際に選択できるバージョンについて、MySQL5.7、8.0 ともにデフォルトとなるバージョンが定められていることがわかります。(v3 では3.04.8、v2 では2.11.4)

メジャーバージョン

メジャーバージョンは、少なくとも対応する MySQL のバージョンが終了するまでの期間は利用可能です。メジャーバージョンのサポート終了は 12 ヶ月前にリマインダーで通知されます。メジャーバージョンのサポート終了後は、スケジュールされたメンテナンスウィンドウ中にアップグレードが適用されます。常時稼働のアプリケーションで利用している場合などは、予期せぬサービス停止につながる恐れがあるため、注意が必要です。

マイナーバージョン

マイナーバージョンのリリースサイクルに関しては、四半期に1度のサイクルでリリースされますが、サイクルに変更が発生する(早くなる)場合もあります。マイナーバージョンは、少なくともリリースから1年間は利用可能で、その後は後続のデフォルトのマイナーバージョンへ自動アップグレードされる可能性があります。(可能性なので、1年が経ったのちすぐにスケジュールされたメンテナンスウィンドウ中に適用されるというわけではなさそう?です。)ただ例外があり、セキュリティの問題などで重大な問題がある場合やメジャーバージョンの使用期間が終了した場合は1年間という期限を待たずして特定のメジャーバージョンのマイナーバージョンを早い時点で置き換えることがあります。期限が近づいているマイナーバージョンの自動アップグレードが適用される3ヶ月前にリマインダーが通知されます。マイナーバージョン自動アップグレード設定が有効の場合、ID が 「RDS-EVENT-0156」 のクラスターイベントが発生し、発生後の次のメンテナンスウィンドウ中にアップグレードが実施されます。有効でない場合は、期限切れ後のメンテナンスウィンドウ中にアップグレードが実施される仕様のようです。(また、それとは別に年に2回、スケジュールされた自動アップグレードのタイミングもあるみたいです。)マイナーバージョン自動アップグレードに関しては Aurora DB クラスターのマイナーバージョン自動アップグレード を参考にするとよさそうです。

マイナーバージョン(LTS)

続いて長期サポート(LTS)についてです。Aurora はメジャーバージョンごとに、長期サポート(LTS)として定められた特定のマイナーバージョンがあり、少なくとも3年間は利用可能です。マイナーバージョンの12ヶ月保証という制約があると前述しましたが、LTS のおかげで、メジャーバージョンごとに12ヶ月以上利用可能なマイナーバージョンが少なくとも1つ存在することになります。この LTS の期限は6ヶ月前にリマインダーで通知されますが、メジャーバージョンの運用と同様にセキュリティの問題等の事情により、それよりも早く通知される可能性があります。LTS にはパッチバージョンによる重大な修正のみが含まれており、マイナーバージョン導入後の新機能のリリースなどは含まれていません。年に1度、LTS 専用の最新パッチバージョンによるパッチ修正が行われるため、可能な限りそちらは取り込んだ方がよさそうです。

ちなみに各メジャーバージョン現在の LTS については下記のようになっているようです。

パッチバージョン

パッチバージョンに関しては、前述したように、初期のリリース後に追加されたマイナーバージョンに関する重要な修正を含むものであり、必要に応じてリリースされるかと思いますので、一旦ライフサイクルにおいては他のバージョンの管理とは分けて考えた方が良さそうですね。

まとめると

図にまとめておくとこのような感じかと思われます。(間違ってたらゴメンナサイ

リリースサイクル 利用可能な期間 サポート終了通知タイミング サポート終了後の挙動
メジャーバージョン MySQL のリリースに左右されそう? 少なくとも対応する MySQL (メジャーバージョン)が終了するまで 1年前 期限切れ後のスケジュールされたメンテナンスウィンドウ中にアップグレード適用
マイナーバージョン 四半期に1度(例外有り) 少なくともリリースから1年間(例外有り) 3ヶ月前 [自動アップグレード有効の場合]
RDS-EVENT-0156 のイベントが発生後のスケジュールされたメンテナンスウィンドウ中にアップグレード適用

[自動アップグレード無効の場合]
期限切れ後のスケジュールされたメンテナンスウィンドウ中にアップグレード適用
マイナーバージョン( LTS ) 少なくともリリースから3年間 6ヶ月前 ?(期限切れ後のスケジュールされたメンテナンスウィンドウ中にアップグレード適用されそうな気はする)
パッチバージョン 必要に応じて都度

Aurora MySQL v3 で選択可能な最新バージョン

現在選択できる最新バージョンを調べたところ、下記の通りでした。

  • Aurora MySQL 3.05.1 (compatible with MySQL 8.0.32)
 % aws rds describe-db-engine-versions --engine aurora-mysql --query "DBEngineVersions[?contains(DBParameterGroupFamily, 'aurora-mysql8.0')].DBEngineVersionDescription"                        
[
    "Aurora MySQL 3.01.0 (compatible with MySQL 8.0.23)",
    "Aurora MySQL 3.01.1 (compatible with MySQL 8.0.23)",
    "Aurora MySQL 3.02.0 (compatible with MySQL 8.0.23)",
    "Aurora MySQL 3.02.1 (compatible with MySQL 8.0.23)",
    "Aurora MySQL 3.02.2 (compatible with MySQL 8.0.23)",
    "Aurora MySQL 3.02.3 (compatible with MySQL 8.0.23)",
    "Aurora MySQL 3.03.0 (compatible with MySQL 8.0.26)",
    "Aurora MySQL 3.03.1 (compatible with MySQL 8.0.26)",
    "Aurora MySQL 3.03.2 (compatible with MySQL 8.0.26)",
    "Aurora MySQL 3.03.3 (compatible with MySQL 8.0.26)",
    "Aurora MySQL 3.04.0 (compatible with MySQL 8.0.28)",
    "Aurora MySQL 3.04.1 (compatible with MySQL 8.0.28)",
    "Aurora MySQL 3.05.0 (compatible with MySQL 8.0.32)",
    "Aurora MySQL 3.05.1 (compatible with MySQL 8.0.32)"
]

MySQL のバージョン管理モデル

こちらは冒頭でも触れたように、Introducing MySQL Innovation and Long-Term Support (LTS) versions でバージョン管理モデルの変更の発表がありましたので、このブログの内容を参考にあらためて整理するのがよさそうです。また、EOL については MySQL テクニカル・サポート や、Lifetime Support Policy:Oracle Technology Products(PDF) が参考になるためそちらもチェックしていきます。

バージョン管理モデル変更点のサマリ

ざっくりと変更点をサマっておきます。

  • MySQL は8.1のリリース以降イノベーションリリースと LTS(長期サポート)リリースの2タイプのリリースに分かれるようになった
  • イノベーションリリースではバグ修正だけでなく、新機能や改善の修正も含まれる(例として、8.1のバグ修正やパッチ修正は8.1内ではなく、次のイノベーションリリースである8.2で行われるみたいなイメージ)
  • イノベーションリリースは四半期に1度、LTS リリースは2年ごとに予定されている
  • 来年 MySQL バージョン8.xは最終的に LTS リリースとして定められる予定(おそらく8.4?)
  • 非推奨機能については少なくとも1年間は削除までの余地が与えられる(例として9.2で非推奨なら、9.6までは使える <= イノベーションリリースが四半期に1度のペースでのリリースなので、4つのイノベーションリリース * 4ヶ月 = 1年)
  • LTS リリースはメジャーバージョンの最後のバージョンで、次のイノベーションリリースではメジャーバージョンが上がる(例として、8.4.0が LTS リリースの場合、次のイノベーションリリースは9.0となる)
  • 8.0.34以降、8.0のサポート終了までは同マイナーバージョンにおいてはバグ修正のみリリースにとどまる

リリースサイクルは下記のイメージです。

Introducing MySQL Innovation and Long-Term Support (LTS) versions より引用

なので、イノベーションリリースに手を出す以上は積極的な変更が行われるリスクを許容した上でこまめにメンテする心構えが必要そうな印象ですね。

ライフサイクル (ざっくり)

MySQL テクニカル・サポート を見た限り、メンテナンス・リリースやバグ修正、パッチ、アップデートのリリースは Extended のサポート期限(6~8年)となっておりますので、これがいわゆる EOL という位置付けになりそうです。

MySQL テクニカル・サポート より引用

サポート概要 Premier(1-5年) Extended(6-8年) Sustain(9年以降)
24時間365日サポート
無制限インシデント
ナレッジベース
メンテナンス・リリース、バグ修正、パッチ、アップデートの提供 既存のもの
MySQL コンサルティング・サポート

また、Lifetime Support Policy:Oracle Technology Products(PDF) に現在リリースされている MySQL について、各バージョンごとのリリース情報が明記されています。例えば、MySQL8.0 に着目すると、2018年4月に GA となっており、EOL (Extended Support Ends サポート終了)は 2026年の4月ということが分かります。

Lifetime Support Policy:Oracle Technology Products(PDF) より一部引用(P29)

Release GA Date Premier Support Ends Extended Support Ends Sustaining Support Ends
MySQL Database 5.0 Oct 2005 Dec 2011 Not Available Indefinite
MySQL Database 5.1 Dec 2008 Dec 2013 Not Available Indefinite
MySQL Database 5.5 Dec 2010 Dec 2015 Dec 2018 Indefinite
MySQL Database 5.6 Feb 2013 Feb 2018 Feb 2021 Indefinite
MySQL Database 5.7 Oct 2015 Oct 2020 Oct 2023 Indefinite
MySQL Database 8.0 Apr 2018 Apr 2025 Apr 2026 Indefinite

まとめると

こちらも可能な限り図にまとめると以下のような感じでしょうか?(こちらも間違ってたらゴメンナサイ

リリースサイクル 利用可能な期間
メジャーバージョン 2~3年ごと(MySQL8.1を除く) 8年間
マイナーバージョン(イノベーションリリース) 四半期に1度 次のマイナーバージョンリリース (イノベーションまたは LTS リリース)まで
マイナーバージョン(LTS リリース) 2年間 リリースから8年間?(それともメジャーバージョンサポート終了まで?)
パッチバージョン(イノベーションリリース) 次のイノベーションリリースまでは出ない なし
パッチバージョン(LTS リリース) 必要に応じて都度

所感(今 Aurora MySQL v3で選ぶバージョンは何がよさそうか)

現在Aurora MySQL で選択できるバージョンが MySQL 8.0.32 までであることから、現時点ではまだ MySQL 側のイノベーションリリースを考慮したバージョン選定を行うことはできなさそうです。ただRDS だとプレビューで MySQL8.1 互換のものがリリースされているみたいです(Amazon RDS for MySQL が Amazon RDS データベースプレビュー環境でのイノベーションリリースバージョン 8.1 のサポートを開始)。近い将来 Aurora 側でも随時イノベーションリリースのサイクルに乗ったバージョン互換のものが リリースされる可能性はあるかと思われるので、その際のバージョン選定も早めに視野に入れておいた方がよさそうですね。安定した運用という観点で考えると、8.4.x と噂される MySQL8.0 の LTS リリースおよび、Aurora 側でそれに当たる互換バージョンがリリースされるまでは、基本的に v3 の LTS でかつデフォルトバージョンとなっているもの(現時点 の Aurora MySQL 3.04.1 ※MySQL8.0.28互換)を選ぶのがよさそうな気がしました。 バグ修正のみリリースされることになる MySQL8.0.34 の互換バージョンもそのうち出てくると思うのですが(Aurora MySQL 3.05.x?)、LTS ではないと思うのでどうなんでしょうか。

疑問

前項で MySQL8.x の LTS が来年にリリースされると触れましたが、そうなると当然当該バージョン互換のものが Aurora MySQL でもリリースされるかと思います。となると、MySQL8.x の LTS バージョン互換の Aurora MySQL のバージョンがリリースされた場合、今存在している v3 の LTS (Aurora MySQL 3.04.x)はどうなるんだろう? とふと疑問に思いました。しかし、ドキュメントをあらためてよく見ると、メジャーバージョンごとに少なくとも1つ以上の LTS バージョンが存在する旨が記載されていたため、v3 に関しては LTS バージョンが2つ存在する可能性も考えうるという見解に至りました。

Amazon Aurora バージョン

Aurora メジャーバージョンごとに、長期サポート (LTS) バージョンとして指定された特定のマイナーバージョンがあり、これらは、少なくとも 3 年間の利用が可能です。つまり、メジャーバージョンごとに少なくとも 1 つのマイナーバージョンが、通常の 12 か月よりも長く利用可能になります。

おわりに

今回は、Aurora MySQL v2 EOL 対応に伴い、移行先バージョンに関してアレコレ調べて考えてみました。データベースの EOL 対応、いろいろ大変だと思いますが、頑張っていきましょ〜〜〜。

参考

Discussion