---
title: Aurora MySQL v1 から v3 へ一段飛ばしのバージョンアップをした話
tags:  #aws #aurora #mysql #移行 #バージョンアップ  
author: [hmatsu47(まつ)](https://convert.docswell.com/user/hmatsu47)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/YJ6541D17V.jpg?width=480
description: データベース移行のウラガワ - 円滑なリリースのために取り組んだ LT 2023/9/26
published: September 22, 23
canonical: https://convert.docswell.com/s/hmatsu47/54Q9M6-2023-09-22-230242
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/YJ6541D17V.jpg)

Aurora MySQL v1 から v3 へ
一段飛ばしのバージョンアップをした話
データベース移行のウラガワ
- 円滑なリリースのために取り組んだ LT 2023/9/26
まつひさ（hmatsu47）


# Page. 2

![Page Image](https://bcdn.docswell.com/page/GJ5YQ43LJ4.jpg)

自己紹介
松久裕保（@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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LE35VG6DJ5.jpg)

本日お話しする内容（1/2）
● 昨年（自社で）実施した DB バージョンアップについて
○ 一段飛ばしのバージョンアップを選んだ理由
○ あえて停止時間を設けてバージョンアップした理由
○ バージョンアップ作業の流れ（列挙のみ）
○ バージョンアップ時に直面した問題
→ 詳細は Zenn で 2 冊の本にまとめてあります
○
https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book
○
https://zenn.dev/hmatsu47/books/aurora-mysql-do-book
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/8EDD81V2EG.jpg)

本日お話しする内容（2/2）
● これから Aurora MySQL をバージョンアップされる方へ
○ 対象 DB の使われ方次第で「ハマるポイント」が変わる
○ Aurora MySQL v3 のバージョン間差異に気を付ける
● まとめ
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V7PX8QVLE8.jpg)

一段飛ばしのバージョンアップを選んだ理由
● 原則：1 バージョンずつ上げていくべき
● 今回のケース
○ 対象 DB を利用しているプロダクトの事情
○ 「MySQL 8.0 の薄い本」の製作を通して得た知識があった
→加えて、Aurora MySQL v1 の EoL まで時間的な余裕があった
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/2JVLN5Z67Q.jpg)

対象 DB を利用しているプロダクトの事情
● テストコードが実装されていない
○ 手作業による詳細動作確認必須→手間がかかる
○ 2 回バージョンアップ作業を行うのは（できれば）避けたい
■
プロダクト開発の時間を確保したい
■
2 回に分ける→動作確認等の所要時間が合計 1.5 ～ 2 倍
【注】DB のバージョンアップ × 言語環境のバージョンアップのような
異種混合のバージョンアップ→より慎重に実施したほうが良い
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/5EGXK642JL.jpg)

「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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/4JQ8N4G97P.jpg)

あえて停止時間を設けてバージョンアップした理由
● 深夜の利用が少ない
○ toB のプロダクトで利用
● データ不整合リスクの低減を優先
○ 停止時間のほとんど : データ比較の実行時間
→旧 DB 〜新 DB レプリケーションによりデータ比較以外の時間を短縮
○ Blue / Green できるように
○ インプレースアップグレードより短い時間での切り替えが目標
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/K742GQ8RJ1.jpg)

バージョンアップ作業の流れ
● 準備
○ 情報収集とアプリケーション修正の先行調査（SRE）
○ アプリケーション修正（開発チーム全体）
○ DB 切り替え作業計画・リハーサル・性能試験
● バージョンアップ
○ 修正版アプリケーションリリース
○ 旧 DB →新 DB 切り替え作業
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LJ1MDP2VEG.jpg)

バージョンアップ時に直面した問題（1/5）
● 暗黙のソート順→不定に（昇順／降順が変化）
○ ORDER BY がない、または列の指定が足りないケース
■
GROUP BY ... ASC / DESC が廃止された影響も
→ソート順の完全な再現は諦め、不具合にならない範囲で対応
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/GJW3Y2R3J2.jpg)

バージョンアップ時に直面した問題（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


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4EZVXDRGJ3.jpg)

バージョンアップ時に直面した問題（3/5）
● v1 〜 v2 〜 v3 の 2 段 binlog レプリケーションで対応
当初予定
実際
※保証外
変更
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/Y76541RQEV.jpg)

バージョンアップ時に直面した問題（4/5）
● MySQL Connector/J のバージョン問題
○ Java 用接続ライブラリ
○ サーバー同様、8.0.x の x が変わると挙動が変わる
■
例 : 日付のキャスト処理や TLS 対応バージョンなど
■
サーバーで Deprecated → MySQL Connector/J では先行 Removed が多い
→最新ではない少し古いバージョンに変更
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/G75YQ48274.jpg)

バージョンアップ時に直面した問題（5/5）
● その他（主なものをピックアップ）
○ テーブル全件 COUNT(*) の失速
■
https://zenn.dev/hmatsu47/articles/mysql80-count-slowdown
○ 実行計画の変化
■
https://qiita.com/hmatsu47/items/9b1090111f2683d386bc
○ 主キーなしテーブルの差分確認失敗
○ binlog レプリケーション設定変更時エラー
■
サービス再開後にレプリケーション方向を変える際に発生（本番⇔ DR 間）
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/9J2GPVK1JR.jpg)

Aurora MySQL をバージョンアップされる方へ（1/2）
● 対象 DB の使われ方次第で「ハマるポイント」が変わる
○ 概ね共通
■
暗黙のソート順
■
■
デフォルト Collation の変更
TempTable エンジン・内部一時テーブル処理の変更（主に Reader） etc.
○ 共通しない問題（意外と多い）
■
■
■
接続ライブラリ問題
レプリケーショントラブル
性能・サイジング etc.
→他社事例は参考程度に見る（自社プロダクトの状況を必ず確認する）
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/DEYV53N4EM.jpg)

Aurora MySQL をバージョンアップされる方へ（2/2）
● Aurora MySQL v3 のバージョン間差異に注意
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
→サーバーのバージョンと同様、接続ライブラリのバージョンの違い
にも注意する
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/VJNMNVX678.jpg)

まとめ
● 状況に合ったバージョンアップ戦略を採用する
○ デッドライン（EoL など）までの猶予期間と修正ボリューム
○ プロダクト開発業務（新機能開発・機能改善など）とのバランス
○ サービスの特性 etc.
● 他社事例は参考程度に見る
○ 対象 DB の使われ方次第で「ハマるポイント」が変わる
● Aurora MySQL v3 のバージョン間差異に注意
17


