MySQL8.4 からのダウングレード方法について

目次

はじめに

2024 年 4 月 30 日に MySQL 8.4 Long-Term Support (LTS) がリリースされました。

LTS と Innovation Release の違いについては、以前のブログ記事でも触れていますが、公式リファレンスにも新しく説明が追加されているので、まずはこちらをご参照ください。

今回は、MySQL 8.4 からサポートされるようになった下位バージョンへのダウングレード方法について、その範囲と方法について確認していきたいと思います。

サポート範囲

Downgrade Path Path Examples Supported Downgrade Methods Notes
Within an LTS series 8.4.y LTS to 8.4.x LTS In-place, logical dump and load, MySQL Clone, or by using replication
From an LTS or Bugfix series to the previous LTS or Bugfix series 8.4.x LTS to 8.0.y Logical dump and load or by using replication Only supported for rollback purposes (that is, if no new server functionality has been applied to the data)
From an LTS or Bugfix series to an Innovation series after the previous LTS series 8.4.x LTS to 8.3.0 Innovation Logical dump and load or by using replication Only supported for rollback purposes (that is, if no new server functionality has been applied to the data)
From within an Innovation series 8.3 to 8.2 Logical dump and load or by using replication Only supported for rollback purposes (that is, if no new server functionality has been applied to the data)

参照 : Chapter 4 Downgrading MySQL

サポートされるダウングレードの範囲については、以下の 4 つに分けられています。

  1. 同一の LTS 内 : 例) 8.4.5 → 8.4.1 など
  2. 特定の LTS から前の LTS(あるいはバグ修正リリース) : 例) 8.4.0 → 8.0.37 など
  3. 特定の LTS から前の LTS 以降の Innovation Release : 例) 8.4.0 → 8.3.0 など
  4. Innovation Release の間 : 例) 8.3.0 → 8.2.0 など

MySQL 8.0 においては 8.0.34 以降がバグ修正リリースであるため、それ以前のバージョン(MySQL 8.0.33 以前)についてはダウングレードのサポート対象外である点に注意する必要があります。なお、2 から 4 についてはロールバック(切り戻し)のためのダウングレードのみがサポートされており、普段から利用することは想定されていません。

また、アップグレードの際は LTS を跨ぐような(MySQL 8.0 LTS → MySQL 9.x LTS)アップグレードはサポートされていないため、恐らくダウングレードにおいても同様に 1 つ前の LTS までしかサポートされていないことが想定されます。

サポートされるダウングレード方法

1 の場合、以下の方法によるダウングレードがサポートされています。

  • インプレースダウングレード
  • クローンプラグインを利用したダウングレード
  • 論理バックアップのリストアによるダウングレード
  • レプリケーション機能を利用したダウングレード

一方 2 から 4 においては制限があり、以下のダウングレード方法しかサポートされていないので注意してください。

  • 論理バックアップのリストアによるダウングレード
  • レプリケーション機能を利用したダウングレード

それでは、それぞれの実施手順について確認をおこなってみたいと思いますが、現時点で MySQL 8.4 のバージョンは 1 つしかないので、今回は MySQL 8.0 のバグ修正リリースへのダウングレード方法に絞って検証をおこないます。

論理バックアップのリストアによるダウングレード

この方法は、MySQL 8.0.33 以前と同様のダウングレード手順となります。
なお、現時点で公式から手順は公開されていませんが、過去バージョン(MySQL5.7)のリファレンスに手順が存在しているので、こちらを参考に実施していきます。

環境情報

  • OS : Redhat Enterprise Linux 9
  • MySQL : MySQL 8.4.0 および MySQL 8.0.34(ダウングレード先)
  • 設定値 : RPM パッケージインストール後のデフォルト値を使用

論理バックアップの取得

以下のどちらかの方法で論理バックアップを取得します。なお、mysqlpump については MySQL 8.4 で削除されてしまったのでご注意ください。

今回は mysqldump による論理バックアップを取得する方法で検証してみたいと思います。

まず、以下のコマンドでバックアップを取得します。

–output-as-version は新しく追加されたオプションであり、後方互換性のために以下の値を設定することが出来ます。

  • SERVER :
    実行したサーバーを読み込んで、そのバージョンと互換性を持つようにダンプファイルを構成します。
  • BEFORE_8_0_23 :
    source および replica という用語を、現在は削除されている MASTER および SLAVE に置き換えて出力します。
  • BEFORE_8_2_0
    SHOW CREATE EVENT における DISABLE ON REPLICA の出力を DISABLE ON SLAVE に置き換えます。

今回はダウングレード先が MySQL 8.0.34 であるため、 BEFORE_8_2_0 を指定してバックアップを取得します。

データの初期化とリストア

RPM パッケージのダウングレードをおこなった後、一度全てのデータを削除して、その後データの初期化をおこないます。

初期化をおこなった後、データのリストアを実行します。

リストア後は、ユーザー権限などの反映をおこなうため一度プロセスの再起動をおこない、これでダウングレードが完了します。

レプリケーション機能を利用したダウングレード

現時点で公式から手順は公開されていませんが、ダウングレードマニュアルの「using replication」という記載や、以前公開された LTS に関する記事の内容から推察すると、たとえば(ロールバックのために)MySQL 8.4 をソースとして MySQL 8.0.34 とレプリケーションをおこなうことがサポートされるようになったと理解できます。

MySQL の非同期レプリケーションによるアップグレードとダウングレード

ビジネス・クリティカルな環境でのアップグレードは多くの場合、MySQL の非同期レプリケーションを用いて行われ、新しいバージョンでの環境が現在のバージョンのレプリカとして設定されます。これにより、ダウンタイムがほぼゼロのアップグレードが可能になります。
レプリケーションはある LTS または Innovation リリースをソースとすると、次に挙げるバージョンをレプリカとして可能になります。

  • 次の LTS リリース
  • 次の LTS リリースまでの間の全ての Innovation リリース (例として、LTS 8.4 → LTS 9.7は可能ですが、LTS 8.4 → LTS 10.7 は不可)

新しいバージョンを展開した後に問題が発生した場合は、以前のバージョンにレプリケートして戻せることが重要です。したがって、MySQL の非同期レプリケーションは以前のバージョンにレプリケートできます。このサポートはロールバックのみを目的としており、新しい機能はまだ使用されていないことが必要ですし、通常の継続的な本番環境構築の一部と見なすことはできません。

参照 : https://blogs.oracle.com/mysql-jp/post/introducing-mysql-innovation-and-longterm-support-lts-versions-jp

用途としては、たとえば MySQL 8.0 から MySQL 8.4 へのアップグレードを非同期レプリケーションを利用して切り替えた後、何らかの理由で MySQL 8.0 へ切り戻しを実施する必要が発生した場合に備えてこの手順を実施することで、ダウンタイムを抑えてダウングレードが実施できることが期待できます。

環境情報

[ソースサーバー]

  • OS : Redhat Enterprise Linux 9
  • MySQL : MySQL 8.4.0
  • 設定値 : RPM パッケージインストール後のデフォルト値を使用(server_id のみ指定)

[ダウングレード先(レプリカサーバー)]

  • OS : Redhat Enterprise Linux 9
  • MySQL : MySQL 8.0.34
  • 設定値 : RPM パッケージインストール後のデフォルト値を使用(server_id のみ指定)

(切り替え前)非同期レプリケーションの構築

MySQL 8.4 に切り替えて更新処理を開始する前に、MySQL 8.0.34 とのレプリケーションを開始しておきます。

まずはソースサーバーのバイナリログポジションを確認します。このとき、 SHOW MASTER STATUS は利用できなくなっているので注意してください。

その後、MySQL 8.0 側でレプリケーションを開始します。実際にはレプリケーションユーザーは既に作成されているかと思いますが、必要に応じて以下のようなユーザーを作成するようにしてください。

その後、もし切り戻しが必要になった場合は、レプリカである MySQL 8.0 に切り替えをおこなうことで、ダウングレードが完了します。

まとめ

ここまで、MySQL 8.4 においてサポートされるダウングレード方法について確認しました。
これまでは公式にはサポートされていなかったレプリケーションによるダウングレードがサポートされるようになったことで、ダウンタイムを抑えた切り戻しが実施しやすくなったのではないかと思います。

ただし、サポートされるようになったとはいえ全ての機能に対する後方互換性が担保されるようになったわけではありません。そのため、以下の非互換性についてチェックして、ダウングレードしても問題ないかどうかの確認を忘れないようにご注意ください。
https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次