Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
オンプレMySQLをTiDB Cloudへ移行した手順紹介 @TiUG #0
Search
Tao Watanabe
January 29, 2024
Technology
530
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
オンプレMySQLをTiDB Cloudへ移行した手順紹介 @TiUG #0
TiUG #0 (
https://tiug.connpass.com/event/303186/)のLT資料です
。
Tao Watanabe
January 29, 2024
More Decks by Tao Watanabe
See All by Tao Watanabe
マイクロサービスの効率的な監視〜不安定な依存先との闘い〜
taowata
6
2.9k
Other Decks in Technology
See All in Technology
専門領域のAIをどう評価するか
bengo4com
2
340
フロントエンドカンファレンス関西2026 - 速すぎるUIに、待ち時間を
teamlab
PRO
0
210
Browser Spec: Testing Hotwire with Ruby
takahashim
1
140
価値について
gree_tech
PRO
0
130
LLM-as-a-Judgeは本当に信頼できるのか――評価器を評価する話
taka_aki
2
840
Claude の新機能を、 出た日に触って社内に届けるまで
rfdnxbro
1
200
NDIでApple Vision Proにリアルタイム映像送信
jyouryuusui
0
130
Local CI × GitHub Actions
gogutan
3
230
Kiro Crewで「みのるん式」仕事術やってみた
minorun365
PRO
3
930
データエンジニアの次の戦場は "プロセスエンジニアリング"
sansantech
PRO
1
130
ソフトウェア ファクトリー - 再現性のあるソフトウェアの工場づくり / Software factory
iktakahiro
7
5.2k
Webの常識が通じないHTMLメールのダークモード
teamlab
PRO
0
140
Featured
See All Featured
Abbi's Birthday
coloredviolet
4
10k
Rails Girls Zürich Keynote
gr2m
96
14k
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
460
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
460
Building Flexible Design Systems
yeseniaperezcruz
330
41k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
What does AI have to do with Human Rights?
axbom
PRO
1
2.5k
How to make the Groovebox
asonas
2
2.5k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
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がもっと使いやすくなると嬉しい