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指定的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM