- MySQL8.0系はマイナーバージョンの更新でも互換性のない変更が入るので、変更点によく目を通すこと
- MySQL8.0系の推奨バージョン: 8.0.28 or 8.0.34より新しい最新バージョン
- 各社知見を共有しているので、事前検証や性能調査、移行計画はしっかり組んで8.0に移行しよう
- MySQL5.7系は2023年10月末でEOL
- Aurora MySQL v2(MySQL5.7)は2024年10月末まで に延長された
- 備考: Amazon RDSは延長したが最大で2024年2月末まで
- MySQL8.0系のおすすめするバージョン: 8.0.28 or 8.0.34より新しい最新バージョン
- 2023/10時点のAurora MySQL v3はMySQL8.0.28互換でLTSになった
- 注1: MySQL8.0のバージョン経緯
- 2018-04-19 MySQL8.0.11でGA(一般提供開始)
- 2023-04-18 MySQL8.0.33までマイナーバージョン毎に破壊的変更が含まることがあった
- 2023-07-18 MySQL8.0.34以降は破壊的変更は含まれなくなった。(バグ・セキュリティフィックスのみ)
- 注2: 最新バージョンは8.2だが、InnovationリリースなのでLTSではない
- 四半期ごとにリリースされるので、追従が大変(Amazon RDSには来てない)
- サポートの期限は次の Innovation Release が公開されるまでと短い。
- https://blogs.oracle.com/mysql-jp/post/introducing-mysql-innovation-and-longterm-support-lts-versions-jp
- 注3: MySQL x.y.zと書いたとき、x.yをメジャーバージョン、zをマイナーバージョンとすることが多い
MySQL8.0系はマイナーパージョンの更新でも互換性のない変更が入るので、変更点によく目を通すこと
- MySQL :: MySQL 8.0 リファレンスマニュアル :: 2.11.4 MySQL 8.0 での変更
- Aurora MySQL バージョン 2 と Aurora MySQL バージョン 3 の比較 - Amazon Aurora
Aurora v2で最適化していたparameterを引き継ぎつつ、Aurora v3で事前に対応しておいた方が良さそうな値を設定する。
- Aurora MySQL バージョン 3 での新しい一時テーブルの動作 - Amazon Aurora
- パラメータチューニング - AWS の規範的ガイダンス
- Aurora MySQLで大量データ取得クエリ実行時、一時領域不足エラー - Qiita
- DockerHubにあるmysqlイメージの最新はOracleLinuxを使っており、Intel/M1両対応のためmysql/mysql-serverを使用
- mysql:8.0.28-oracle を使用したかったが、M1 Macで2回目に起動したときにエラーで落ちたので却下した
- util.checkForServerUpgrade() を実施して、移行後に問題がある箇所を整理する
採用した。前述の事前準備に問題ないことを確認した後にDBインスタンスの変更を行う。
- Amazon Aurora MySQL DB クラスターのメジャーバージョンのアップグレード - Amazon Aurora
- ブルー/グリーンデプロイの作成 - Amazon Aurora
binlog_format
を推奨値のMIXに設定しておく必要がある。(再起動が必要)
- MySQL :: MySQL 8.0 リファレンスマニュアル :: 5.4.4.1 バイナリロギング形式
- 8.0 互換バージョンへのアップグレードが失敗した場合した際に出力されるログファイル
- 本番リリース直前に実施して、本番でしか再現しない内容があると困るので、事前にB/Gを実施して8.0互換にバージョンアップできるか確認すること。
- 詳細は Aurora MySQL バージョン 3 のアップグレードに関する問題のトラブルシューティング を熟読すること
- 結論: 見送り。アプリケーション側の対応が大きいため、今回はutf8mb3のままとする
- 対応してない文字や絵文字のサニタイズ問題があるのでUXの観点からも対応したい
- 対応時にはutf8mb4の照合順序のデフォルト値の変更があるので要検討
- 結論: 見送り。Aurora v2→v3対応後に実施する必要があり、かつ最低利用料金がかかるコストはそこまで削減しなさそうなため。
- 旧バージョンのAurora Serverless v1は使っていない時間は停止できたが、v2は最低利用料金がかかる。