Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
オンプレMySQLをTiDB Cloudへ移行した手順紹介 @TiUG #0
Search
Tao Watanabe
January 29, 2024
Technology
0
420
オンプレMySQLをTiDB Cloudへ移行した手順紹介 @TiUG #0
TiUG #0 (
https://tiug.connpass.com/event/303186/)のLT資料です
。
Tao Watanabe
January 29, 2024
Tweet
Share
More Decks by Tao Watanabe
See All by Tao Watanabe
マイクロサービスの効率的な監視〜不安定な依存先との闘い〜
taowata
6
2.6k
Other Decks in Technology
See All in Technology
Digitization部 紹介資料
sansan33
PRO
1
4.5k
AWS Well-Architected から考えるオブザーバビリティの勘所 / Considering the Essentials of Observability from AWS Well-Architected
sms_tech
1
110
AIエージェントが書くのなら直接CloudFormationを書かせればいいじゃないですか何故AWS CDKを使う必要があるのさ
watany
18
7.6k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.2k
対話型音声AIアプリケーションの信頼性向上の取り組み
ivry_presentationmaterials
3
1.1k
全部AI、全員Cursor、ドキュメント駆動開発 〜DevinやGeminiも添えて〜
rinchsan
10
5.1k
助けて! XからWaylandに移行しないと新しいGNOMEが使えなくなっちゃう 2025-07-12
nobutomurata
2
200
今だから言えるセキュリティLT_Wordpress5.7.2未満を一斉アップデートせよ
cuebic9bic
2
170
Data Engineering Study#30 LT資料
tetsuroito
1
200
SRE with AI:実践から学ぶ、運用課題解決と未来への展望
yoshiiryo1
0
340
CDK Toolkit Libraryにおけるテストの考え方
smt7174
1
550
Autify Company Deck
autifyhq
2
44k
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
337
57k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Producing Creativity
orderedlist
PRO
346
40k
Balancing Empowerment & Direction
lara
1
460
How to Think Like a Performance Engineer
csswizardry
25
1.7k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
Documentation Writing (for coders)
carmenintech
72
4.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Transcript
オンプレMySQLを TiDB Cloudへ移行した手順紹介 TiUG #0
自己紹介 DMM.com プラットフォーム事業本部 渡部太緒 (わたなべ たお) X: @tao_wata 認証APIの開発・運用を行っています
発表内容 • オンプレMySQLをTiDB Cloudへ移行した手順 • 差分チェックツール sync-diff-inspector の詰まりどころ
オンプレMySQLをTiDB Cloudへ 移行した手順
移行の要件 サービス無停止
移行手順 1. 既存データdump&import 2. 並行書き込み 3. 差分チェックと差分解消 4. 参照先をMySQLからTiDBへ切り替え
オンプレ環境 既存データをdumpし、S3へアップロード MySQL .sql ファイル Amazon S3
TiDB CloudへS3経由でデータimport コンソールからimportできる 空のテーブルを作成しておく Amazon S3 TiDB Cloud
オンプレ環境 並行書き込み API MySQL 書き込み (Upsert) 書き込み 読み取り MySQLとTiDB片方の書き込みが 失敗した場合
両方ロールバックして整合性を担保 TiDBへの書き込みはUpsert
差分チェックと解消 オンプレMySQLのデータdump から 並行書き込み開始 までの間に 更新のあったデータはTiDBに同期されていない → sync-diff-inspectorで差分チェックし、差分解消クエリを実行する
sync-diff-inspectorとは GitHub: pingcap/tidb-tools リポジトリで管理されているツール MySQLとTiDB, MySQLとMySQL, TiDBとTiDBのデータを比較できる 少量のデータに差分があるシナリオで差分解消ができる
sync-diff-inspectorの実行 オンプレ環境 API MySQL 書き込み 書き込み 読み取り sync-diff-inspector 読み取り 読み取り
差分解析結果と 差分解消クエリの出力
差分解消クエリの実行 sync-diff-inspectorによって出力された差分解消クエリを TiDBに対して実行 → 再度sync-diff-inspectorを実行し、差分がないことを確認
意外とうまくいった 実は、sync-diff-inspectorはデータ書き込みのあるMySQLとTiDB 間 のオンラインチェックをサポートしていない 確かにエラーの発生で差分チェックが中断することがあったが... [FATAL] [diff.go:548] ["the count is
not correct"] 出力できたところまでの差分解消クエリの実行と差分チェックの再実行 を繰り返すことでデータ同期が完了
参照先をMySQLからTiDBへ切り替え 既存のSQLがそのまま使えるので、苦戦することなく切り替え完了 オンプレ環境 API MySQL 書き込み 書き込み 読み取り 読み取り
結果 サービス無停止でのDB移行ができた
sync-diff-inspectorの 詰まりどころ
現象: 差分解消クエリが文字化け ↓ BINARY型カラムのデータがそのまま出力されていたため文字化けしてしまった REPLACE INTO `table_name`(...,`binary_column`, ...) VALUES (...,'ßä���<95>ko^P��«',
...); REPLACE INTO `sbtest`.`sbtest99`(`id`,`k`,`c`,`pad`) VALUES (3700000,2501808,'hello','world');
解決策: 16進数形式でクエリを出力するよう改修 sync-diff-inspectorをフォーク 16進数表記にデータ変換し、 UNHEX関数を利用してクエリを出力するよう改修 REPLACE INTO `table_name`(...,`binary_column`, ...) VALUES
(...,UNHEX('hexadecimal representation'), ...);
Feature Request 投げました sync-diff-inspector: use UNHEX for BINARY and VARBINARY
types #746 https://github.com/pingcap/tidb-tools/issues/746
まとめ
まとめ TiDB Cloudのimport 機能とsync-diff-inspectorを利用して 無停止移行ができた sync-diff-inspectorがもっと使いやすくなると嬉しい