Skip to content

Instantly share code, notes, and snippets.

@kashewnuts
Last active November 2, 2023 06:52
Show Gist options
  • Save kashewnuts/d52e59dea4d154396dea19198cc99301 to your computer and use it in GitHub Desktop.
Save kashewnuts/d52e59dea4d154396dea19198cc99301 to your computer and use it in GitHub Desktop.

Amazon Aurora MySQL v2→v3移行のための調査ログ

TL;DR

  • MySQL8.0系はマイナーバージョンの更新でも互換性のない変更が入るので、変更点によく目を通すこと
  • MySQL8.0系の推奨バージョン: 8.0.28 or 8.0.34より新しい最新バージョン
  • 各社知見を共有しているので、事前検証や性能調査、移行計画はしっかり組んで8.0に移行しよう

MySQLのバージョン: 8.0対応が迫っている

  • MySQL5.7系は2023年10月末でEOL
  • MySQL8.0系のおすすめするバージョン: 8.0.28 or 8.0.34より新しい最新バージョン
  • 注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ではない
  • 注3: MySQL x.y.zと書いたとき、x.yをメジャーバージョン、zをマイナーバージョンとすることが多い

MySQL8.0/Aurora v3での変更点

MySQL8.0系はマイナーパージョンの更新でも互換性のない変更が入るので、変更点によく目を通すこと

Parameter設定値参考URL

Aurora v2で最適化していたparameterを引き継ぎつつ、Aurora v3で事前に対応しておいた方が良さそうな値を設定する。

ローカル開発環境で事前にチェック

  • DockerHubにあるmysqlイメージの最新はOracleLinuxを使っており、Intel/M1両対応のためmysql/mysql-serverを使用
    • mysql:8.0.28-oracle を使用したかったが、M1 Macで2回目に起動したときにエラーで落ちたので却下した
  • util.checkForServerUpgrade() を実施して、移行後に問題がある箇所を整理する
    • utf8mb3 or utf8mb4: 🍣🍺問題
    • 予約語の衝突
    • 壊れたデータやテーブルがないか
      • Zero Date, Datetime, and Timestamp values
      • Tables with dangling FULLTEXT index reference

B/Gデプロイでダウンタイムを抑える

採用した。前述の事前準備に問題ないことを確認した後にDBインスタンスの変更を行う。

upgrade-prechecks.log でエラー時の原因調査

utf8mb4に移行するか

  • 結論: 見送り。アプリケーション側の対応が大きいため、今回はutf8mb3のままとする
  • 対応してない文字や絵文字のサニタイズ問題があるのでUXの観点からも対応したい
  • 対応時にはutf8mb4の照合順序のデフォルト値の変更があるので要検討

Aurora Serverless対応をするか

  • 結論: 見送り。Aurora v2→v3対応後に実施する必要があり、かつ最低利用料金がかかるコストはそこまで削減しなさそうなため。
  • 旧バージョンのAurora Serverless v1は使っていない時間は停止できたが、v2は最低利用料金がかかる。

合わせて読みたい

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment