在將數(shù)據(jù)遷移到 TiDB 過程中,通過使用 mydumper 和 loader 可以實(shí)現(xiàn)存量數(shù)據(jù)的整體遷移,之后的增量數(shù)據(jù)可以借助官方提供工具 syncer。其基本原理就是將 syncer 作為待同步數(shù)據(jù)的 MySQL 服務(wù)器的一個(gè) slave,通過讀取 binlog 實(shí)現(xiàn)和 master 的同步。
因?yàn)槲覀冞w移的情況和官方文檔示例的情況不太相同,因此也遇到一些坑,在此總結(jié)一下。
指定待同步的binlog
syncer 同步時(shí)需要一個(gè)用于指定 binlog pos 的 meta 文件,binlog 相關(guān)的信息可以從 loader 導(dǎo)出的文件 metadata 中看到
binlog-name = "mysql-bin.000700"
binlog-pos = 281874470
binlog-gtid = ""
metadata 文件內(nèi)容一般是如下形式
Started dump at: 2018-12-24 17:26:37
SHOW MASTER STATUS:
Log: mysql-bin.000700
Pos: 281874470
GTID:
SHOW SLAVE STATUS:
Host: 10.x.1x.2xx
Log: mysql-bin.007363
Pos: 971282247
GTID:
Finished dump at: 2018-12-24 18:49:05
我們?cè)谕竭^程中是將 syncer 連接了從庫 db05 上,使用的是 master 的 binlog mysql-bin.000700,使用 slave 的 binlog 將無法正常同步。
數(shù)據(jù)庫重命名
另外由于我們要同步的數(shù)據(jù)庫發(fā)生了重命名,比如源數(shù)據(jù)庫是 online_1,現(xiàn)在在 TiDB 上重命名為 online_2,這種情況在官方文檔沒有配置說明,正確的配置應(yīng)該是下面這樣,才能將 online_1 上的表同步到 ask_1。注意 replicate-do-table 配置下面需要制定的是目的方數(shù)據(jù)庫,配置為源數(shù)據(jù)庫不能同步數(shù)據(jù)。另外路由表本是由于合并分庫分表數(shù)據(jù),這里用來遷移不同數(shù)據(jù)庫甚至不同表名的數(shù)據(jù)。
[[replicate-do-table]]
db-name ="online_2"
tbl-name = "ask_1"
[[route-rules]]
pattern-schema = "online_1"
pattern-table = "ask_1"
target-schema = "online_2"
target-table = "ask_1"
同步完成之后就可以在monitor查看同步情況了
