5.2K Views
April 16, 22
スライド概要
JAWS-UG 朝会 #32 2022/4/11
Qiita や Zenn でいろいろ書いてます。 https://qiita.com/hmatsu47 https://zenn.dev/hmatsu47 MySQL 8.0 の薄い本 : https://github.com/hmatsu47/mysql80_no_usui_hon Aurora MySQL v1 → v3 移行計画 : https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book https://speakerdeck.com/hmatsu47
Aurora MySQL v1 → v3 の移行を準備する JAWS-UG 朝会 #32 2022/4/11 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) ● https://qiita.com/hmatsu47 名古屋で Web インフラのお守り係をしています 以前 MySQL 8.0 の薄い本を作って配っていました ○ Qiita の記事: https://qiita.com/hmatsu47/items/ceb75caf46e3c761095d ○ GitHub リポジトリの他、印刷版を BOOTH で配布していました ○ 2021/5 発行の 8.0.24 対応版を最後に更新停止しました https://note.com/hmatsu47/n/n3ad586c31dce 2
本日のネタ ● Aurora MySQL v1(5.6 互換)の EoL が発表 ○ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora. MySQL56.EOL.html ● 2023/2/28 までに v2 または v3 へ移行が必要 ● せっかく移行するなら v3 へ ● v3 移行に必要な情報を集めて Zenn で本にまとめた …という話 3
Aurora MySQL v1 の EoL までの流れ ● 2022/9/27 : 新しいクラスタ・インスタンス作成停止 ○ 以下は(EoL まで)実行可能 ■ v1 スナップショットの復元 ■ クラスタにリードレプリカ追加 ■ インスタンス設定変更 ■ ポイントインタイムリカバリ(PITR) ■ 既存 v1 クラスタのクローン作成 ● 2023/2/28 : EoL(予定)※時刻はいずれも 00:00:00 UTC 4
Aurora MySQL v2 の EoL はどうなる? ● Amazon Aurora メジャーバージョンが利用可能な期間 ○ https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/Aurora.V ersionPolicy.html#Aurora.VersionPolicy.MajorVersionLifetime ■ 現時点の予定 : 2024/2/29 ■ 延長される可能性はある ● 本家 MySQL 5.7 の EoL : 2023/10/21 ○ https://endoflife.software/applications/databases/mysql ■ あと 1 年半後 5
Aurora MySQL v3 への移行、という選択 ● ベースは MySQL の最新バージョン、8.0 に ● 他の RDBMS と遜色ないレベルの SQL 文をサポート ○ MySQL は「軽い SQL 文を高速に実行」が売りだった ○ その分複雑な処理は苦手→バージョンを重ねるごとに改善 ● 性能向上 ○ 並列処理性能が向上 ○ インデックスのないテーブル結合の高速化(ハッシュ結合) 6
ただし、v1 からの移行には難しさも ● v2 以降に廃止・変更された機能がある ○ AWS 公式 Aurora MySQL 関連ドキュメント ● リリースモデルの変更がある ○ Continuous Delivery Model(継続提供モデル)を採用 ● 移行パスや移行条件に制限がある ○ v3 へのインプレースアップグレード不可、など ● コードが大きく書き換えられている 7
移行の難しさ①廃止・変更された機能がある ● クエリキャッシュ廃止 ○ 便利だけど並列処理の妨げに→本家 MySQL 8.0 で廃止 ● 古い暗号化関数の廃止 ○ 時代の流れ(脆弱な暗号を使い続けるの、ダメ!) ● MySQL 独自文法の廃止 ○ 例 : GRANT 文でユーザ作成と権限の割り当てを一度に済ませる ● GIS 機能リニューアルによる非互換 などなど 8
移行の難しさ②リリースモデルの変更がある ● コミュニティ版 MySQL 8.0 のリリースモデル変更 ○ Continuous Delivery Model(継続提供モデル)を採用 ○ マイナーバージョンアップで機能が追加・変更・削除される ● Aurora MySQL v3 も本家に追従する予定 ○ 初期リリースの 3.01.0 : MySQL 8.0.23 互換 ■ LTS (長期サポートバージョン)ではない ■ 今後のマイナーバージョンで LTS 提供予定 9
リリースモデル変更による影響 ● 予約語の追加(継続的に発生) ○ 新機能に関するキーワードが予約語化(RANK など) ○ テーブル名やカラム名などとのバッティングで不具合の可能性 ● 挙動が変更される機能・SQL 文の存在(同上) ○ 例 : GROUP BY 〜 ASC/DESC および暗黙ソート廃止(8.0.13) ■ これは MySQL ユーザにはよく使われているので影響範囲が大きい ■ 特に ASC を指定しない暗黙ソートは無意識に使っていることが多い 10
移行の難しさ③移行パスや移行条件に制約がある ● v1 → v3 は直接アップグレードできない ○ クローンなどで一旦 v2 へ ● v2 → v3 クローン・インプレースアップグレード未提供 ○ v2 → v3 は今のところスナップショットからの復元一択 ○ 現状では Global Database を v3 に移行するのが困難 ● バックトラック使用中のクラスタは NG ● Aurora Serverless v1 は非サポート 11
移行の難しさ④コードが大きく書き換えられている ● SQL 文の仕様が同じでも内部処理が違うと… ○ 同じ SQL 文を実行しているのに思わぬ性能低下の可能性が ● 実は MySQL 5.6 → 5.7 でもそこそこ変更が入っている ○ まれに旧バージョンより遅くなるSQL 文があったり ● MySQL 8.0 では、それ以上に変更が入っている ○ Aurora MySQL v3 でも同様の問題が生じる可能性あり 12
参考 : SQL 文を実行するときの流れ 構文解析 パーサ・リライタ 実行計画 実行 オプティマイザ エグゼキュータ ・ハンドラ ● v3 ではそれぞれに変更が入った ● 実行計画のバリエーションが増えた結果、 ■ ORDER BY する前のデータの並び順が変わる ■ 効率の悪い実行計画が選択される→遅くなることも 13
結局のところ、 ● 事前調査は大事 ○ ノールックでいきなり移行するのは危険 ● 設定やアプリケーション変更の必要性 ○ ほぼ発生するものとみたほうが良い ● 動作検証や性能検証が必要 ● 移行パスや手順を確認した上で計画を立てる必要がある 14
そこで、必要な情報を Zenn で本にまとめてみた https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book 15
ポイント ● 変更点をできるだけ集約 ○ AWS 公式 Aurora MySQL 関連ドキュメント ○ Oracle 公式 MySQL 関連ドキュメント ○ その他ブログなど ● その中で、特に注意が必要な点をピックアップ ● あわせて、移行計画に必要なステップや情報を解説 16
こんなイメージ 17
こんなイメージ 18
こんなイメージ 19
まとめ ● Aurora MySQL v1 は 2023/2/28 EoL 予定 ○ v2 の EoL も意外と早く来るかも ● v1 → v3 の移行には気を付ける点が多くある ○ v1 → v2 より非互換が多い、リリースモデルが変わった、など ● v1 → v3 移行に必要な情報をまとめてみた ○ Zenn で本を公開中 ○ https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book 20