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)

<<:  【Day13】:EXTI外部中断/事件控制器

>>:  Day19 Helm manage Open-Match

Story Telling - 简易有效的讨论

最近看到一本书 Domain Storytelling: A Collaborative, Visu...

终章:TeamCity 进阶学习路径

之前有幸在一次机会里,与几位在 DevOps 领域深耕多时的前辈对谈。那时前辈曾提到,在带新人时都会...

[Day10]C# 鸡础观念- 重播与停止 while回圈与break

日子一天一天过, 周而复始,无限循环 C#里面也有重复不断的语句,while while回圈 执行前...

Day10【Web】网路攻击:CSRF

CSRF / XSRF CSRF 全称 Cross Site Request Forgery, 中文...

进击的软件工程师之路-软件战斗营 第二十周(结训周)

心得感想   经历了二十周,五个月的培训,从一个连回圈都不太懂的外行人,到可以自己写出一个App(虽...