はじめに
このドキュメントは、AWS RDS MySQL 5.7の標準サポート終了に伴い、MySQL 8.0へのアップグレードを実施するための手順をまとめたものです。
MySQLのバージョンアップに際して、事前準備から実行手順、検証、そして万が一のロールバック手順までを網羅しています。
特に、Railsを使用しているプロジェクトにおいて、互換性の確認や必要な設定変更についても触れています。MySQL 8.0への移行は、セキュリティの向上や新機能の利用など、多くのメリットがありますが、慎重な準備と計画が必要です。
事前準備
-
バックアップの取得
- 現在のAuroraクラスタのバックアップを取得します。アップグレード中に問題が発生した場合に備えて、データを保護するために必須のステップです。
aws rds create-db-cluster-snapshot --db-cluster-identifier <cluster-identifier> --db-cluster-snapshot-identifier <snapshot-identifier>
-
互換性の確認
- MySQL 8.0での変更点や廃止された機能を確認し、アプリケーションが問題なく動作するかを確認します。
- MySQL 5.7から8.0への移行ガイドラインを公式ドキュメントで確認します。
- 使用しているRailsのバージョンがMySQL 8.0に対応しているかを確認します。Rails 5.2以降はMySQL 8.0をサポートしています。
https://github.com/brianmario/mysql2?tab=readme-ov-file#ruby-on-rails--active-record
手順
-
パラメータグループの作成
- MySQL 8.0用のパラメータグループを作成し、必要な設定を行います。
aws rds create-db-cluster-parameter-group \ --db-cluster-parameter-group-name my-aurora8-parameter-group \ --db-parameter-group-family aurora-mysql8.0 \ --description "My Aurora MySQL 8.0 parameter group"
- 注釈: パラメータグループは、データベースの設定を定義するテンプレートです。新しいバージョンのMySQLに適した設定を行う必要があります。
-
新しいパラメータグループの設定
- 新しいパラメータグループに適用する設定を変更します。例えば、特定の文字セットやタイムゾーンの設定など。
aws rds modify-db-cluster-parameter-group \ --db-cluster-parameter-group-name my-aurora8-parameter-group \ --parameters "ParameterName=character_set_server,ParameterValue=utf8mb4,ApplyMethod=pending-reboot"
-
クラスタのアップグレード
- クラスタを停止して、新しいバージョンへのアップグレードを開始します。
aws rds modify-db-cluster \ --db-cluster-identifier <cluster-identifier> \ --engine-version 8.0.mysql_aurora.3 \ --db-cluster-parameter-group-name my-aurora8-parameter-group \ --apply-immediately
- 注釈: クラスタを停止してアップグレードするため、ダウンタイムが発生することを考慮してください。
-
インスタンスのアップグレード
- クラスタ内の各DBインスタンスも新しいバージョンにアップグレードします。
aws rds modify-db-instance \ --db-instance-identifier <instance-identifier> \ --db-cluster-identifier <cluster-identifier> \ --engine-version 8.0.mysql_aurora.3 \ --apply-immediately
- アップグレードによる再起動で、10~15分のアクセス不可時間が生じます。
- 注釈: 本番のアップグレードの前に、利用者へメンテナンスの連絡および、当日はメンテナンスページを公開する準備を行い利用者への影響を最小減にします。
検証
-
接続テスト
- アプリケーションや管理ツールを使用して新しいバージョンのデータベースに接続し、正常に動作することを確認します。
- 注釈: 接続テストは、すべてのアプリケーション機能が期待通りに動作することを確認するために重要です。
-
データ整合性の確認
- データの整合性を確認し、必要に応じてスキーマやデータの修正を行います。特にデータ参照系(検索機能・並び替え機能など)に問題が出る可能性が高いため重点的に動作検証する必要あり。
- 注釈: データ整合性のチェックは、データが正確で完全であることを確認するために行います。
-
監視とログの確認
- CloudWatchやRDSのログを確認し、エラーや警告が発生していないかを確認します。
- 注釈: ログの監視は、潜在的な問題を早期に発見するために重要です。
ロールバック
- 何らかの理由で問題が発生した場合は、事前に取得したスナップショットから復元することができます。
aws rds restore-db-cluster-from-snapshot \ --db-cluster-identifier <new-cluster-identifier> \ --snapshot-identifier <snapshot-identifier>
- 注釈: ロールバック手順は、アップグレードが失敗した場合に元の状態に戻すための方法です。
備考
-
RDS ではデフォルトのユーザー認証方式は mysql_native_password のままであるため、特別な対応は不要です。
-
逆にローカル環境のユーザー認証方式がcaching_sha2_password となっていることがあるため、mysql_native_passwordへ変更する必要があります。(これで半日沼りました。)
まとめ
- 以上が、RDS MySQL 標準サポート終了に伴う対応の基本的な手順です。必ず事前にバックアップを取得し、互換性の確認を行うことが重要です。また、使用しているRailsのバージョンがMySQL 8.0に対応していることを確認してください。