TiDB數據庫 使用syncer工具同步實時數據
mysql> select campaign_id ,count(id) from creative_output group by campaign_id; 602843 rows in set (4 min 44.23 sec)
mysql> select is_cr_own ,count(id) from creative_output group by is_cr_own; 597684 rows in set (44.55 sec)
首先是查看tidb數據庫的syncer工具的介紹
使用syncer工具的場景一般是:
全量導入歷史數據後,通過增量的方式同步新的數據 (需要 checker + mydumper + loader + syncer)。該場景需要提前開啟 binlog 且格式必須為 ROW。
主要的步驟我們可以看官網鏈接:
https://pingcap.com/docs-cn/op-guide/migration-overview/
註意:mysql必須開啟幾項服務才行,主要是bin-log功能,Binlog格式等等,詳細請查看:https://pingcap.com/docs-cn/tools/syncer/ 的後半部分內容。
有一個文件syncer.mata需要註意:
我創建並編輯好這個文件後放在了/usr/local/tidb-tools目錄下面,這個文件的目錄需要在config.toml的內容中指定一下。但是我的重點是要說上面這個圖片中的“binlog-gtid”這一行的內容。因為我本次實驗沒有用到主從環境,所以暫時不考慮binlog-gtid的問題,下面列一下我的文件內容
我只寫了這兩行數據,不過雖然沒有用到binlog-gtid的功能,也應該指定出來,把binlog-pos設置為空就可以了,例如:binlog-pos=""
然後我們最好使用配置文件config.toml來啟動syncer。config.toml文件可以放在任一位置,在啟動syncer時提供文件即可:例如
其實位置是小問題,只是我在看文章的時候糾結z這個位置是在哪裏呢,後來才知道是小問題。
還有幾個報錯的,我們需要註意一下:
1、報錯:就是啟動syncer的時候直接報錯
居然不能連接mysql這肯定是配置文件的原因,查看一下來:
log-level = "info" server-id = 101 ## meta 文件地址 meta = "/usr/local/tidb-tools/syncer.meta" worker-count = 16 batch = 10 ## pprof 調試地址, Prometheus 也可以通過該地址拉取 syncer metrics ## 將 127.0.0.1 修改為相應主機 IP 地址 status-addr = "172.31.30.62:10086" ## 跳過 DDL 或者其他語句,格式為 **前綴完全匹配**,如: `DROP TABLE ABC`,則至少需要填入`DROP TABLE`. # skip-sqls = ["ALTER USER", "CREATE USER"] ## 在使用 route-rules 功能後, ## replicate-do-db & replicate-ignore-db 匹配合表之後(target-schema & target-table )數值 ## 優先級關系: replicate-do-db --> replicate-do-table --> replicate-ignore-db --> replicate-ignore-table ## 指定要同步數據庫名;支持正則匹配,表達式語句必須以 `~` 開始 #replicate-do-db = ["~^b.*","s1"] ## 指定要同步的 db.table 表 ## db-name 與 tbl-name 不支持 `db-name ="dbname,dbname2"` 格式 #[[replicate-do-table]] #db-name ="dbname" #tbl-name = "table-name" #[[replicate-do-table]] #db-name ="dbname1" #tbl-name = "table-name1" ## 指定要同步的 db.table 表;支持正則匹配,表達式語句必須以 `~` 開始 #[[replicate-do-table]] #db-name ="test" #tbl-name = "~^a.*" ## 指定**忽略**同步數據庫;支持正則匹配,表達式語句必須以 `~` 開始 #replicate-ignore-db = ["~^b.*","s1"] ## 指定**忽略**同步數據庫 ## db-name & tbl-name 不支持 `db-name ="dbname,dbname2"` 語句格式 #[[replicate-ignore-table]] #db-name = "your_db" #tbl-name = "your_table" ## 指定要**忽略**同步數據庫名;支持正則匹配,表達式語句必須以 `~` 開始 #[[replicate-ignore-table]] #db-name ="test" #tbl-name = "~^a.*" # sharding 同步規則,采用 wildcharacter # 1. 星號字符 (*) 可以匹配零個或者多個字符, # 例子, doc* 匹配 doc 和 document, 但是和 dodo 不匹配; # 星號只能放在 pattern 結尾,並且一個 pattern 中只能有一個 # 2. 問號字符 (?) 匹配任一一個字符 #[[route-rules]] #pattern-schema = "route_*" #pattern-table = "abc_*" #target-schema = "route" #target-table = "abc" #[[route-rules]] #pattern-schema = "route_*" #pattern-table = "xyz_*" #target-schema = "route" #target-table = "xyz" [from] host = "172.31.30.62" #是這一步出錯了 user = "root" password = "123456" port = 3306 [to] host = "172.31.30.62" user = "root" password = "" port = 4000
不知道大概什麽問題,雖然我的mysql和tidb主節點在一個機器上面,但是連接的時候指定不同的端口就可以了,可是在這裏就是行不通,我猜應該是hosts文件映射的問題吧,但是我沒有修改hosts文件,只是把上面的黃色區域的內容修改了為:“127.0.0.1”就成功了,我們看一下成功的例子:
然後你在mysql中插入數據,syncer會實時寫入tidb數據庫中。
即便把syncer關掉之後,這個時候雖然不會同步,但是一啟動進程就會立即同步mysql中之前未同步到tidb中的數據。
下面這是syncer的同步進程,在config.toml指定的
TiDB數據庫 使用syncer工具同步實時數據