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
390
オンプレ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.4k
Other Decks in Technology
See All in Technology
Ruby on Railsで持続可能な開発を行うために取り組んでいること
am1157154
3
160
Amazon Q Developerの無料利用枠を使い倒してHello worldを表示させよう!
nrinetcom
PRO
2
120
DevinでAI AWSエンジニア製造計画 序章 〜CDKを添えて〜/devin-load-to-aws-engineer
tomoki10
0
210
クラウド関連のインシデントケースを収集して見えてきたもの
lhazy
9
1.9k
RaspberryPi CM4(CM5も)面白いぞ!
nonnoise
0
100
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
370
Qiita Organizationを導入したら、アウトプッターが爆増して会社がちょっと有名になった件
minorun365
PRO
1
320
AIエージェント開発のノウハウと課題
pharma_x_tech
9
4.8k
30→150人のエンジニア組織拡大に伴うアジャイル文化を醸成する役割と取り組みの変化
nagata03
0
350
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
Охота на косуль у древних
ashapiro
0
120
アジリティを高めるテストマネジメント #QiitaQualityForward
makky_tyuyan
1
270
Featured
See All Featured
Documentation Writing (for coders)
carmenintech
68
4.6k
The Cult of Friendly URLs
andyhume
78
6.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Typedesign – Prime Four
hannesfritz
41
2.5k
Adopting Sorbet at Scale
ufuk
75
9.2k
Speed Design
sergeychernyshev
27
820
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
Building Adaptive Systems
keathley
40
2.4k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
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がもっと使いやすくなると嬉しい