LoginSignup
17
12

More than 1 year has passed since last update.

RDS インスタンスのメジャーバージョンのアップグレード

Last updated at Posted at 2023-03-18

メジャーバージョンとマイナーバージョンのアップグレード

メジャーバージョン マイナーバージョン
手動 手動、自動
既存アプリケーションとの下位互換性のないDBの変更が含まれる場合有。 既存のアプリケーションとの下位互換性がある変更のみ。

メジャーバージョンのアップグレード

  • 商用環境への適用前に、いずれのアップグレードも徹底的にテストすること。
  • メジャーバージョンアップグレード中、必要に応じて RDS によって MySQL バイナリ mysql_upgrade が実行され、テーブルがアップグレードされます。
  • メジャーバージョンアップグレード中、RDS によって slow_log および general_log テーブルが空にされます。これらのログ情報を保持するには、メジャーバージョンアップグレードの前にログファイルの内容を保存する。
  • 通常は約 10 分で完了するが、インスタンスタイプによる。

MySQL 5.7 から 8.0 へのアップグレードの事前チェック

  • MySQL 8.0 には 5.7 との非互換性がいくつかある。
  • MySQL 5.7 から 8.0 へのアップグレードをスタートすると、RDS では、これらの非互換性を検出するために自動的に事前チェック(必須)が実行されます。非互換性がある場合、RDS でアップグレードすることはできません。事前チェックで非互換性が見つかった場合、DB インスタンスが停止する前に、RDS により自動的にアップグレードがキャンセルされるため、実行時にダウンタイムが発生することはありません。

MySQL 5.7 から 8.0 へのアップグレードに失敗した後のロールバック

  • アップグレードに失敗した場合、DB は新しい MySQL 8.0 で正常に起動できなく、DB は再起動され、MySQL 5.7 にロールバックします。

アップグレードをテストする

1.ドキュメントで互換性の問題を確認する。

2.カスタムDBパラメータグループを利用している場合、新しいメジャーバージョンと互換性のある既存の設定で新しいDBパラメータグループを作成し、手順5でテストインスタンスをアップグレードするときに新しいDBパラメータグループを指定する。
3.アップグレードする DB の スナップショットを作成する。
4.スナップショットから復元して、新しいテスト DB を作成する。
5.新しいテスト DB を新しいバージョンにアップグレードする。
6.アップグレードした DB によって使用されるストレージを評価し、アップグレードに追加のストレージが必要かどうかも判断する。
7.新しいバージョンの DB とアプリケーションが正しく動作することを確認する。

アップグレード方法

従来のアップグレード方法

  • マルチ AZ 配置にある場合、プライマリとスタンバイの両方がアップグレードされます。アップグレードが完了するまで、DBインスタンスは利用できなくなります。

[データベース]を選択し、アップグレードする DB インスタンスを選択し、[変更]をクリック。
スクリーンショット 2023-03-08 22.23.11.png

DB エンジンバージョンには、8.0 の新しいバージョンを指定し、[続行]。
スクリーンショット 2023-03-08 22.24.31.png
スクリーンショット 2023-03-08 22.25.25.png

[DB インスタンスを変更]をクリック。
スクリーンショット 2023-03-08 22.26.55.png

結果を確認します。
スクリーンショット 2023-03-08 22.45.18.png
イベントから、次の通り再起動がされるため、ダウンタイムが発生することがわかります。
スクリーンショット 2023-03-08 22.44.43.png

リードレプリカを使用してダウンタイムを短縮してアップグレードする方法

MySQL 5.7 DB のリードレプリカを作成します。[アクション] で [リードレプリカを作成] を選択して作成します。※なお、リードレプリカを作成するには、「自動バックアップ」機能が有効になっている必要があります。これは、バックアップから復元してリードレプリカが作成されるからです。
スクリーンショット 2023-03-10 18.33.36.png

リードレプリカが作成されたら MySQL 8.0 にアップグレードします。
※これは、「従来のアップグレード方法」と同様の手順です。

リードレプリカの MySQL 8.0 へのアップグレードが完了したら、リードレプリカがソース MySQL 5.7 の DBインスタンスと最新であることを確認します。

mysql> SHOW REPLICA STATUS\G
*************************** 1. row ***************************
        Seconds_Behind_Source: 0

MySQL 8.0 にアップグレードしたばかりのリードレプリカを選択し、[アクション] で、[昇格] させます。
スクリーンショット 2023-03-12 17.17.32.png

これで、MySQL データベースのアップグレードバージョンが作成されたため、アプリケーションを新しい MySQL 8.0 DB インスタンスへ向き先を変更するだけです。
スクリーンショット 2023-03-12 17.35.19.png

ブルーグリーン

ブルー/グリーンデプロイの作成

DB インスタンス(database-1)を選択し、「アクション」 で 「ブルー/グリーンデプロイの作成」 を選択します。
スクリーンショット 2023-03-18 17.49.16.png

「ブルーグリーン識別子」を入力し、今回はエンジンバージョンが、ブルー環境は「5.7.41」→ グリーン環境は「8.0.32」にしたいので、以下の通り設定します。
スクリーンショット 2023-03-18 16.00.17.png

ブルー/グリーンデプロイの表示

database-1(Blue)と database-1-green(Green)が作成されました。
エンドポイントにおいても、それぞれ、Blue と Green のものが作成されているため、切り替え前に、Green に対してテストを行うことができます。
スクリーンショット 2023-03-18 17.02.42.png
ここで注目しておいてほしいのは「リソースID」です、後程切り替え後の状態も確認します。
スクリーンショット 2023-03-18 17.04.09.png

ブルー/グリーンデプロイの切り替え

切り替えるブルー/グリーンデプロイを選択し、「アクション」から「切り替え」を選択します。
スクリーンショット 2023-03-18 17.25.49.png

切り替えの内容を確認し、タイムアウトはデフォルトの 5 minutes のまま「切り替え」します。
スクリーンショット 2023-03-18 17.27.35.png

切り替え後の状態を確認してみます。
Green
スクリーンショット 2023-03-18 18.03.33.png
スクリーンショット 2023-03-18 17.34.48.png
Blue
スクリーンショット 2023-03-18 18.03.44.png
スクリーンショット 2023-03-18 17.34.25.png

  • エンドポイント
    Green のエンドポイントは、Blue のエンドポイントとなり、
    Blue のエンドポイントは、old* が付与されたエンドポイントになったことがわかります。
  • DB インスタンス ID
    Green の DB インスタンス ID は、Blue の DB インスタンス ID となり、
    Blue の DB インスタンス ID は、old* が付与された DB インスタンス ID になったことがわかります。
  • リソース ID
    Green のリソース ID は、Green、
    Blue のリソース ID は、Blue のままです。

即ち、DB インスタンス ID は変更になりませんが、リソース ID は変更になるため、この点は注意が必要であり、事前にブルー/グリーンデプロイの考慮事項を確認した方が良さそうです。

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12