RDS MySQL 標準サポート終了に伴う対応

　初めまして。違いを作る会社エム・エー・ディーの田中です。
　来年1月の RDS MySQL 5.7 系サポート終了に伴い、対応に追われている企業様・ご担当者様も多いのではないでしょうか？
　本記事では、エム・エー・ディー社内の基本対応方針を記します。
　バージョンやサイトによって細かな差異はありますが、参考になりましたら幸いです。
 
※文中に登場する日付は、最速で対応が必要な 5.7.37 ～ 5.7.42 に関してです。記述の煩雑さを避けるため、また早い対応がより良いため、統一して記述しています。
# 対応方針
#### ▼推奨する対応
(A) 期日までに MySQL 8.0 系へアップグレード対応する
#### ▼暫定的対応
(B) 有償サポートを利用する
# (A) 期日までに MySQL 8.0 系へアップグレード対応する
## (A-1) メリット/デメリット
### メリット
- 3年後までにはアップグレード対応が必要である
- アップグレードは検証作業が主であるため、12月 から着手すれば間に合う想定
	- SQL の構文の修正が対応内容のメインであるため
	- 特に EC-CUBE4 系の場合、SQL 構文を直接書いている箇所が少ないため[^1]
- SQL 実行速度の改善が期待できる
	- MySQL 8.0 にアップグレードするのみで、既存の実装のままでパフォーマンスの改善する可能性がある
	- MySQL 8.0 で追加になる SQL 構文で、既存の SQL 処理をチューニングできる場合がある (ただし、今回のアップグレード対応はあくまで MySQL 8.0 での動作保証が優先であるため、今回の対応では行うべきではない)
### デメリット
- アップグレードや検証、修正の対応工数・費用が必要
	- カスタマイズ量に応じて対応の軽重が異なる[^1]
	- 検証作業に労力を割く必要がある
- アップグレード実施時に、再起動に伴う10分～15分ほどサイトへのアクセス不可時間が発生する
## (A-2) 対応内容
### アップグレード実施前準備
#### ▼スナップショット (バックアップ) 作成
- 5.7 系でとったスナップショットがあれば、8.0 系へアップグレード後に、スナップショットを用いて 5.7 系へ切り戻しが可能
	- 1月16日 の強制アップグレード後に切り戻しを行った場合、同じく自動アップグレードの対象となる
	- アップグレードを実行するメンテナンスは、利用者都合である程度延期が可能
		- メンテナンスの延期は、2024年2月16日 まで可能
#### ▼設定の確認
- アップグレードに伴い、MySQL の設定が 5.7 系用から 8.0 系用へ変更となる箇所がある
	- MySQL 8.0 のパラメータグループ ( MySQL 設定) の作成が必要
### アップグレード
- アップグレードによる再起動で、10～15分のアクセス不可時間が生じる
- アップグレード後、EC-CUBE3 系および 4 系では、EC-CUBE 内のキャッシュクリアが必要になる可能性あり
### 検証
#### ▼検証の観点
- データ更新系 ( INSERT , UPDATE ) には基本的に影響なし
	- 登録や変更の動作検証は軽めで良い
- データ参照系に問題が出る可能性が高い
	- 検索機能、並び替え機能を重点的に動作検証する必要あり
- カスタマイズを行っている場合は、カスタマイズ箇所の検証に要注意
#### ▼検証方法
1.	8.0 系で利用不可となる SQL 構文の使用箇所を重点的に動作確認
2.	問題が発生した場合、
	- PHP のログにエラー内容を出力するよう設定
	- どの SQL 構文を利用できなくなったかを PHP のログから確認
3.	8.0 系で利用可能な SQL 構文に修正
#### ▼補記
- EC-CUBE4 系以降は、デフォルトが MySQL 8.0 系
- EC-CUBE4 系では、SQL 構文を直接書く箇所が少ないため、カスタマイズ箇所での利用不可 SQL 構文の使用状況を確認する
- EC-CUBE2 系にて、MySQL 8.0 系へのアップグレードでエラー箇所が少なかった例もあるため、3 系以下で必ずしも対応が複雑になるとは限らない
## (A-3) クライアントとの協議事項
- 検証環境を新たに準備するのか、現存する開発環境を割り当てるのか
	- 【最善策】新たに検証環境を準備する
	- ローカル環境でも検証可能だが、実環境での検証を推奨
- 検証中は、他の開発を止めるのか、他の開発も並行して実施するのか
	- 【最善策】現存する開発環境を検証環境に割り当てる場合、他の開発を止める
- RDS 再起動に伴う、サイトアクセス停止日時の決定
	- 2024年2月15日 までの任意の日にちを選択可能[^2]
## (A-4) 特筆すべき注意点
- 切り戻した場合を含み、2024年2月16日 までにアップグレード未実施の場合、2024年2月16日 には 8.0 系へ自動アップグレードを実施する
### 【参考】MySQL 8.0 系へのアップグレードに伴う要対応事例
[MySQL 8.0 への移行が完了しました ～さようなら全ての MySQL 5.7～](https://blog.cybozu.io/entry/2021/05/24/175000)
### 補記
- RDS ではデフォルトのユーザー認証方式は mysql_native_password のままであるため、特別な対応は不要[^3]
# (B) 有償サポートを利用する
## (B-1) メリット/デメリット
### メリット
- 2024年1月16日 ～ 2024年2月16日 の期間中に瞬断することなく、サービスを稼働し続けられる
- 最長3年間は従来環境の利用が可能
### デメリット
- 有償
- 有償サポートの利用可能期間は、メジャーエンジンバージョンの RDS 標準サポート終了日 ( 2023年12月 ) から最大3年間[^4]
	- サポート期間中にアップグレードを行わなかった場合、サポート終了とともに自動アップグレードを実施
- 有償サポートの対象は MySQL 5.7.44 のみ[^4]
	- その他のバージョンを利用している場合、5.7.44 への変更対応が必要
## (B-2) 対応内容
- 2024年1月16日 までに、延長サポートのオプトイン[^2]
## (B-3) クライアントとの協議事項
- アップグレード対応にかかる費用と有償サポートの料金を比較した上で、有償サポートの料金が許容可能か
- 有償サポートはあくまで暫定的措置であり、3年後にはアップグレードが必須である旨を承諾可能か
- 2026年12月 までのどの時期に、アップグレードを実施するか
## (B-4) 特筆すべき注意点
- PJ によって料金差があるため、具体的な金額については調査が必要[^5]
# 参考サイト・注釈
[MySQL 8.0 への移行が完了しました ～さようなら全ての MySQL 5.7～](https://blog.cybozu.io/entry/2021/05/24/175000)
[^1]: EC-CUBE4 系では、SQL 構文の不使用がデフォルトであるため、カスタマイズ部分が主な検証箇所
[^2]: [Amazon RDS for MySQL での MySQL 5.7 系の終了と延長サポートの取り扱いについて](https://blog.serverworks.co.jp/eos-rds-for-mysql57x)
[^3]: [Amazon RDS for MySQL 8.0のデフォルト認証プラグインはmysql_native_password](https://dev.classmethod.jp/articles/rds-mysql-8-default-auth-plugin-is-mysql_native_password/)
[^4]: [Using Amazon RDS Extended Support](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/extended-support.html)
[^5]: [Amazon RDS for MySQL の料金＞Amazon RDS 延長サポートのコスト](https://aws.amazon.com/jp/rds/mysql/pricing/#Amazon_RDS_Extended_Support_costs)