Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Aurora MySQL v1 から v3 へ一段飛ばしのバージョンアップをした話
Search
hmatsu47
PRO
September 22, 2023
Technology
1
900
Aurora MySQL v1 から v3 へ一段飛ばしのバージョンアップをした話
データベース移行のウラガワ - 円滑なリリースのために取り組んだ LT
2023/9/26
hmatsu47
PRO
September 22, 2023
Tweet
Share
More Decks by hmatsu47
See All by hmatsu47
今年の DB ネタ登壇振り返り
hmatsu47
PRO
0
6
RDS/Aurora アップデート 2025
hmatsu47
PRO
0
9
YAPC::Fukuoka 2025 現地ハイブリッド参加の旅
hmatsu47
PRO
0
5
今年の FESTA で初当日スタッフ+登壇してきました
hmatsu47
PRO
0
10
攻略!Aurora DSQL の OCC(楽観的同時実行制御)
hmatsu47
PRO
0
7
PostgreSQL でもできる!GraphRAG
hmatsu47
PRO
0
8
Aurora DSQL のトランザクション(スナップショット分離と OCC)
hmatsu47
PRO
0
14
いろんなところに居る Amazon Q(Developer)を使い分けてみた
hmatsu47
PRO
0
33
「ゲームで体感!Aurora DSQL の OCC(楽観的同時実行制御)」の結果ログから Aurora DSQL の動作を考察する
hmatsu47
PRO
0
10
Other Decks in Technology
See All in Technology
Gemini でコードレビュー知見を見える化
zozotech
PRO
1
270
re:Invent 2025 ふりかえり 生成AI版
takaakikakei
1
210
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
290
RAG/Agent開発のアップデートまとめ
taka0709
0
180
MLflowで始めるプロンプト管理、評価、最適化
databricksjapan
1
250
SREには開発組織全体で向き合う
koh_naga
0
350
AI-DLCを現場にインストールしてみた:プロトタイプ開発で分かったこと・やめたこと
recruitengineers
PRO
2
150
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
280
乗りこなせAI駆動開発の波
eltociear
1
1.1k
「Managed Instances」と「durable functions」で広がるAWS Lambdaのユースケース
lamaglama39
0
330
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
5
530
チーリンについて
hirotomotaguchi
6
2k
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.8k
What's in a price? How to price your products and services
michaelherold
246
13k
KATA
mclloyd
PRO
33
15k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
Facilitating Awesome Meetings
lara
57
6.7k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Raft: Consensus for Rubyists
vanstee
141
7.2k
BBQ
matthewcrist
89
9.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
Transcript
Aurora MySQL v1 から v3 へ 一段飛ばしのバージョンアップをした話 データベース移行のウラガワ - 円滑なリリースのために取り組んだ
LT 2023/9/26 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) • https://my.prairie.cards/u/hmatsu47 • 名古屋で Web インフラのお守り係をしています ◦ SRE
チーム所属 ◦ 技術統括チームのお手伝い(フロントエンド・テストコード実装推進など) • かつて「MySQL 8.0 の薄い本」を作って配っていました ◦ 現在は GitHub リポジトリで印刷用データと Re:VIEW(3.0)原稿を公開中 https://github.com/hmatsu47/mysql80_no_usui_hon 2
本日お話しする内容(1/2) • 昨年(自社で)実施した DB バージョンアップについて ◦ 一段飛ばしのバージョンアップを選んだ理由 ◦ あえて停止時間を設けてバージョンアップした理由 ◦
バージョンアップ作業の流れ(列挙のみ) ◦ バージョンアップ時に直面した問題 → 詳細は Zenn で 2 冊の本にまとめてあります ◦ https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book ◦ https://zenn.dev/hmatsu47/books/aurora-mysql-do-book 3
本日お話しする内容(2/2) • これから Aurora MySQL をバージョンアップされる方へ ◦ 対象 DB の使われ方次第で「ハマるポイント」が変わる
◦ Aurora MySQL v3 のバージョン間差異に気を付ける • まとめ 4
一段飛ばしのバージョンアップを選んだ理由 • 原則:1 バージョンずつ上げていくべき • 今回のケース ◦ 対象 DB を利用しているプロダクトの事情
◦ 「MySQL 8.0 の薄い本」の製作を通して得た知識があった →加えて、Aurora MySQL v1 の EoL まで時間的な余裕があった 5
対象 DB を利用しているプロダクトの事情 • テストコードが実装されていない ◦ 手作業による詳細動作確認必須→手間がかかる ◦ 2 回バージョンアップ作業を行うのは(できれば)避けたい
▪ プロダクト開発の時間を確保したい ▪ 2 回に分ける→動作確認等の所要時間が合計 1.5 ~ 2 倍 【注】DB のバージョンアップ × 言語環境のバージョンアップのような 異種混合のバージョンアップ→より慎重に実施したほうが良い 6
「MySQL 8.0の薄い本」の製作(趣味の活動) • MySQL 8.0 の新機能・変更点のまとめ ◦ 利用例(サンプル) ◦ それを扱ったブログ記事等へのリンク
▪ https://qiita.com/hmatsu47/items/ceb75caf46e3c761095d • MySQL 8.0 は継続提供モデル ◦ 8.0.x の x が進むと機能追加等がある → 8.0.15(試作版)から 8.0.24 まで製作 7
あえて停止時間を設けてバージョンアップした理由 • 深夜の利用が少ない ◦ toB のプロダクトで利用 • データ不整合リスクの低減を優先 ◦ 停止時間のほとんど
: データ比較の実行時間 →旧 DB 〜新 DB レプリケーションによりデータ比較以外の時間を短縮 ◦ Blue / Green できるように ◦ インプレースアップグレードより短い時間での切り替えが目標 8
バージョンアップ作業の流れ • 準備 ◦ 情報収集とアプリケーション修正の先行調査(SRE) ◦ アプリケーション修正(開発チーム全体) ◦ DB 切り替え作業計画・リハーサル・性能試験
• バージョンアップ ◦ 修正版アプリケーションリリース ◦ 旧 DB →新 DB 切り替え作業 9
バージョンアップ時に直面した問題(1/5) • 暗黙のソート順→不定に(昇順/降順が変化) ◦ ORDER BY がない、または列の指定が足りないケース ▪ GROUP BY
... ASC / DESC が廃止された影響も →ソート順の完全な再現は諦め、不具合にならない範囲で対応 10
バージョンアップ時に直面した問題(2/5) • DMS レプリケーションで一部の日時値が変化 ◦ DMS で MEDIUMBLOB / LONGBLOB
が 2 段階処理になる影響 ▪ ON UPDATE CURRENT_TIMESTAMP により日時値を現在時刻で上書き • https://zenn.dev/hmatsu47/articles/mysql-dms-cdc-timestamp-mismatch ◦ 旧 DB 〜新 DB を DMS レプリケーションする予定だった ▪ Aurora MySQL v1 〜 v3 の binlog レプリケーションは保証外 ▪ v1 〜 v2 〜 v3 の 2 段 binlog レプリケーションも保証外 11
バージョンアップ時に直面した問題(3/5) • v1 〜 v2 〜 v3 の 2 段
binlog レプリケーションで対応 12 変更 当初予定 実際 ※保証外
バージョンアップ時に直面した問題(4/5) • MySQL Connector/J のバージョン問題 ◦ Java 用接続ライブラリ ◦ サーバー同様、8.0.x
の x が変わると挙動が変わる ▪ 例 : 日付のキャスト処理や TLS 対応バージョンなど ▪ サーバーで Deprecated → MySQL Connector/J では先行 Removed が多い →最新ではない少し古いバージョンに変更 13
バージョンアップ時に直面した問題(5/5) • その他(主なものをピックアップ) ◦ テーブル全件 COUNT(*) の失速 ▪ https://zenn.dev/hmatsu47/articles/mysql80-count-slowdown ◦
実行計画の変化 ▪ https://qiita.com/hmatsu47/items/9b1090111f2683d386bc ◦ 主キーなしテーブルの差分確認失敗 ◦ binlog レプリケーション設定変更時エラー ▪ サービス再開後にレプリケーション方向を変える際に発生(本番⇔ DR 間) 14
Aurora MySQL をバージョンアップされる方へ(1/2) • 対象 DB の使われ方次第で「ハマるポイント」が変わる ◦ 概ね共通 ▪
暗黙のソート順 ▪ デフォルト Collation の変更 ▪ TempTable エンジン・内部一時テーブル処理の変更(主に Reader) etc. ◦ 共通しない問題(意外と多い) ▪ 接続ライブラリ問題 ▪ レプリケーショントラブル ▪ 性能・サイジング etc. →他社事例は参考程度に見る(自社プロダクトの状況を必ず確認する) 15
Aurora MySQL をバージョンアップされる方へ(2/2) • Aurora MySQL v3 のバージョン間差異に注意 →サーバーのバージョンと同様、接続ライブラリのバージョンの違い にも注意する
16 Aurora バージョン MySQL バージョン 備考 〜 3.02.x 8.0.23 一部キーワードは 8.0.26 3.03.x 8.0.26 Deprecated temptable_use_mmap Deprecated TLS 1.0・1.1 support 3.04.x 8.0.28 Added tmp_table_size Removed TLS 1.0・1.1 support
まとめ • 状況に合ったバージョンアップ戦略を採用する ◦ デッドライン(EoL など)までの猶予期間と修正ボリューム ◦ プロダクト開発業務(新機能開発・機能改善など)とのバランス ◦ サービスの特性
etc. • 他社事例は参考程度に見る ◦ 対象 DB の使われ方次第で「ハマるポイント」が変わる • Aurora MySQL v3 のバージョン間差異に注意 17