MySQL道普請便り

第224回新しいMySQLリリースモデルのアップグレードパス

現在のMySQLのリリースモデルは、LTS(Long-Term Support)とInnovation Releaseの2つのトラックに分かれました。アップグレード方法や互換性も、MySQL 8.0とそれ以前とは異なります。リリースモデルについては1.3 MySQL Releases: Innovation and LTSをご確認ください。

今回は新しいMySQLのリリースモデルのアップグレードパスと、レプリケーションを用いたダウングレード方法について紹介したいと思います。

アップグレードパス

MySQLではいくつかのアップグレード方法を提供しています。それぞれの方法の説明と、対応しているアップグレードパスを紹介します。

  • インプレースアップグレード
  • 論理的アップグレード
  • レプリケーション
  • MySQLクローンプラグイン

また、アップグレードパスには以下があります。

  • LTSから同一LTS内へのアップグレード
  • LTSから次のLTSへのアップグレード
  • LTSから次のLTSよりも前のInnovation Releaseへのアップグレード
  • Innovation Releaseから次のLTSへのアップグレード
  • Innovation Releaseから次のLTSよりも前のInnovation Releaseへのアップグレード

以下のようなアップグレードパスはサポートされていません。

  • LTSから2つ以上先のバージョンのLTSへのアップグレード
  • LTSやInnovation Releaseから次のLTSより後のInnovation Releaseへのアップグレード
  • MySQL 5.7からLTSやInnovation Releaseへのアップグレード

MySQL 5.7の場合は、かならずMySQL 8.0へアップグレードした後に、次のLTSやInnovation Releaseへアップグレードする必要があります。

LTSやInnovation Releaseからは、1つ先のバージョンのみサポートされています。バージョンを超えたアップグレードはサポートされていません。2つ先のバージョンへアップグレードするには、一度次のLTSへアップグレードした後に、希望する次のLTSまたはInnovation Releaseへアップグレードしなくてはいけません。

インプレースアップグレード

インプレースアップグレードは、古いMySQLをシャットダウンして、MySQLのバイナリを置き換え再起動することでアップグレードを行います。新しいバイナリで起動すると、データディクショナリテーブルなど自動でアップグレードされます。

また、MySQL 5.7とそれ以前でのインプレースアップグレードは、バイナリを置き換えて再起動した後にmysql_upgradeコマンドの実行が必要でしたが、MySQL 8.0とそれ以降から必要なくなりました。すべてのアップグレードパスをサポートしています。

論理的アップグレード

論理的アップグレードは、mysqldumpやmysqlshのダンプロードユーティリティを利用したアップグレード方式です。それらのツールからエクスポートを行い、新しいバージョンのMySQLへインポートします。詳しくはLogical Upgradeをご確認ください。これもすべてのアップグレードパスをサポートしています。

レプリケーション

レプリケーションでは、新しいバージョンのMySQLをアップグレード対象のMySQLのレプリカとして設定します。サービスをメンテナンスに入れるなどしてソースへの更新を停止させ、レプリカをソースへ変更することでアップグレードを行います。すべてのアップグレードパスをサポートしています。

MySQLクローンプラグイン

クローンプラグインを使用して、MySQLから別のMySQLへデータをクローニングすることでアップグレードします。このクローンプラグインは、MySQL 8.0とそれ以前では異なるマイナーバージョン間のクローンはサポートされていませんでした。現在のMySQLのリリースモデルにおいては、同一LTS内であればサポートされます。

この方法は以下のアップグレードパスのみサポートされています。

  • LTSから同一LTS内へのアップグレード

レプリケーションを用いたダウングレード

MySQL 8.0とそれ以前では、新しいバージョンのソースから古いバージョンのレプリカへのレプリケーションは、公式でサポートされていません。レプリケーションを用いたアップグレード時に問題が発生すると、古いバージョンのMySQLへロールバックすると思います。その際に、切り替え後からロールバックまでの新しいバージョンのMySQLへの更新を、どのように古いバージョンのMySQLへ適用するかが課題でした。

現在のMySQLのリリースモデルでは同一LTS内、またはLTSから1つ前のLTSと、1つ前のLTS以降のInnovation Releaseへのレプリケーションは可能である、とMySQL公式ブログ に記載されています。ただし、これは前述したロールバック用途のみのサポートです。恒常的に運用することは推奨されていません。

また、新しいバージョンでサポートされたSQL構文などは古いレプリカではエラーになりますし、バイナリログ形式など大きな変更があるとエラーとなる可能性もあります。このようなケースがあるので、ロールバックのためのレプリケーションを検討する際は、そのバージョンのリリースノートやドキュメントをかならず確認し、事前検証を行ってから実施したほうがよいでしょう。

まとめ

今回は、新しいMySQLのリリースモデルのアップグレードパスと、レプリケーションを用いたダウングレード方法について紹介しました。以下の公式ドキュメントを参考に作成したので、より詳細を確認したい方はご参照ください。

おすすめ記事

記事・ニュース一覧