iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
Software Development

TiDB學習筆記系列 第 19

D19 - TiDB Binlog

Binlog也是一套由TiDB提供備份與資料同步的工具。
資料同步的部分,就像他的名字一樣很容易聯想到MySQL的binlog,這方面功能也一樣。
但是官網的資料上寫著,使用上會遇到一些版本的限制,如果使用低於V5.0版本,會有部分功能不兼容的問題,V5.1版本以上就可以正常使用,所以啟用前應詳閱公開說明書。

Binlog主要有兩個角色,負責搜集TiDB產生的binlog並且依據transaction commit順序排序的Pump,以及由Pump搜集數據後,整合轉化成指定格式的Drainer。Pump可以組成cluster,防止機器故障時資料不見。

官方有提供部署binlog的yaml的範本,下面一樣擷取我做異動的部分。這邊精簡化部署,我各加一台Pump與Drainer,然後借用一下pd的機器...

server_configs:
 tidb:
    binlog.enable: true   #打開binlog的開關
    binlog.ignore-error: true  #為了高可用,如果設定false,一旦binlog出了問題整個TiDB會停掉。

pump_servers:
  - host: 10.102.1.92
drainer_servers:
  - host: 10.102.1.195
    config:
      syncer.db-type: "mysql"    #看你要同步到什麼地方 目前支援mysql、tidb、kafka、file
      syncer.to.host: "10.102.1.34"  #mysql的ip
      syncer.to.user: "tidb_rep"       
      syncer.to.password: "密碼自己想"
      syncer.to.port: 3306

接著在TiDB新增一個資料庫tidb_bin,新增一張表bin_test,然後寫入五筆資料,中間因為開的欄位太小所以做了一次schema的異動。

mysql> create database tidb_bin;
Query OK, 0 rows affected (0.52 sec)

mysql> use tidb_bin;
Database changed
mysql> create table bin_test(id int,act varchar(5));
Query OK, 0 rows affected (0.52 sec)

mysql> insert into bin_test(id,act) values(1,'CREATE');
ERROR 1406 (22001): Data too long for column 'act' at row 1
mysql> ALTER table bin_test modify colmun act varchar(10);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your TiDB version for the right syntax to use line 1 column 38 near "act varchar(10)"
mysql> ALTER table bin_test modify column act varchar(10);
Query OK, 0 rows affected (0.51 sec)

mysql> insert into bin_test(id,act) values(1,'CREATE');
Query OK, 1 row affected (0.02 sec)

mysql> insert into bin_test(id,act) values(2,'INSERT');
Query OK, 1 row affected (0.01 sec)

mysql> insert into bin_test(id,act) values(3,'UPDATE');
Query OK, 1 row affected (0.00 sec)

mysql> insert into bin_test(id,act) values(4,'DELETE');
Query OK, 1 row affected (0.01 sec)

mysql> insert into bin_test(id,act) values(5,'SELECT');
Query OK, 1 row affected (0.01 sec)

這時候發現MySQL只同步到新增Table,沒有寫入資料,原來是我漏了加上權限做schema異動。
帳號所需的權限有Insert、Update、Delete、Create、Drop、Alter、Execute、Index、Select。
所以把帳號加上ALTER權限後,再撈一次DB發現有值了。

mysql> select * from tidb_bin.bin_test;
+------+--------+
| id   | act    |
+------+--------+
|    2 | INSERT |
|    5 | SELECT |
|    1 | CREATE |
|    3 | UPDATE |
|    4 | DELETE |
+------+--------+
5 rows in set (0.00 sec)

上一篇
D18 - TiDB備份還原
下一篇
D20 - TiDB數據效驗
系列文
TiDB學習筆記30

尚未有邦友留言

立即登入留言