iT邦幫忙

2021 iThome 鐵人賽

DAY 17
0

TiDB可以同步MySQL的資料異動,那麼能不能反過來讓其他DB同步隨著TiDB異動呢。
答案是可以的,TiDB提供了CDC來滿足此類需求,TiCDC可透過建立多個任務,來同步其他DB或者中間層,例如另一個TiDB,MySQL,Kafka等等。這邊我主要用MySQL來實作。
首先一樣透過tiup安裝cdc,在這邊可以使用tiup cluster scale-out指令來擴充,把cdc的設定寫在scale_out.yaml裡,或者修改原本deploy的yaml檔,另建一組新的cluster。
一樣都在yaml檔內加上cdc相關設定,我加上了兩台cdc server。

cdc_servers:
  - host: 10.102.1.200
  - host: 10.102.1.201

如果用scale-out則輸入

tiup cluster scale-out tidb-test ./scale_out.yaml

如果是重建cluster,則一樣使用deploy

tiup cluster deploy tidb-test v5.1.0 ./topo.yaml --user root [-p] [-i /home/root/.ssh/gcp_rsa]

安裝好cdc之後,先查詢一下capture的list,記得在ctl後面要加上:你安裝的版本才能用。

tiup ctl:v5.2.1 cdc capture list --pd=http://10.102.1.92:2379

https://ithelp.ithome.com.tw/upload/images/20210913/20113220z8VJ2kOOgb.png

接下來就是新增一個資料同步的任務,指令中填入自己連結到mysql的帳密以及ip位置,另外記得後面加上?timezone=字樣,不然會噴錯。

tiup ctl:v5.2.1 cdc changefeed create --pd=http://10.102.1.92:2379 --sink-uri="mysql://tidb_rep:Orz@9487@10.102.1.4:3306/?timezone=" --config=~/cdc.toml --start-ts=0

指令中的config使用的cdc.toml,裡頭可以讓你設定要執行cdc的白名單,這邊我簡單的只針對test.*做讀取

[filter]
rules = ['test.*']

可以透過指令來看現在的執行情況。透過message的回應來檢視執行上是否正常。
比如我在tidb上insert了一筆資料,然後執行指令觀察情況。

tiup ctl:v5.2.1 cdc changefeed list --pd=http://10.102.1.92:2379

發現原來我的帳號沒有足夠的權限作Insert。
https://ithelp.ithome.com.tw/upload/images/20210913/20113220m3JvsG8B3G.png
新增完權限之後,再試一次。可以看到tidb的資料異動確實的呈現在MySQL。
https://ithelp.ithome.com.tw/upload/images/20210913/20113220ICc3ihT1Dt.png


上一篇
D16 - 轉移資料到TiDB工具介紹(三)
下一篇
D18 - TiDB備份還原
系列文
TiDB學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言