一、TiDB Binlog简介

TiDB Binlog 是一个用于收集 TiDB 的 binlog,并提供准实时备份和同步功能的工具,可以理解为Mysql 的 Binlog 主从服务模式,并且TiDB Binlog还支持将数据发送到Kafka中,这又类似与Canal中间件。目前TIDB Binlog集群主要分为 Pump 和 Drainer 两个组件,以及 binlogctl 工具。

TiDB Binlog 整体架构

tidb 对应mysql conf文件_TIDB


注意:

TiDB Binlog 与 TiDB v5.0 版本开始引入的一些特性不兼容,无法一起使用,建议使用 TiCDC 替代 TiDB Binlog。TiCDC在后面的文章中也会讲到。

下面实现TIDB 到 Mysql的数据复制。

二、在集群中扩容出pump和drainer

当前的集群情况:

tiup cluster display tidb-test

tidb 对应mysql conf文件_tidb 对应mysql conf文件_02


一台tidb-server,三台tikv-server,三台pd-server。

并在mysql中创建和Tidb相同的库和表结构。

1. 在mysq数据库中,添加同步用户

创建用户

create user 'tidb' identified by 'tidb123';

赋予权限

grant all privileges on *.* to 'tidb';

2. 编写scale-out-binlog.yaml文件

vi scale-out-binlog.yaml

填写下面内容:

pump_servers:
  - host: 192.168.40.160 
    config:
      gc: 7
      storage.stop-write-at-available-space: 200MB
drainer_servers:
  - host: 192.168.40.162 
    config:
      syncer.db-type: "mysql"
      syncer.to.host: "www.bixc.net"
      syncer.to.user: "tidb"
      syncer.to.password: "tidb123"
      syncer.to.port: 3307
    #kafka配置
	  #syncer.db-type: "kafka" 
	  #syncer.to.kafka-addrs: "127.0.0.1:9092"
	  #syncer.to.kafka-version: "0.8.2.0"

官方TiDB Binlog 配置说明:https://docs.pingcap.com/zh/tidb/stable/tidb-binlog-configuration-file#stop-write-at-available-space

3. 开始扩容

tiup cluster scale-out tidb-test scale-out-binlog.yaml -u root -p

tidb 对应mysql conf文件_tidb 对应mysql conf文件_03


从打印日志可以看出已经扩容成功,下面看下集群状态:

tiup cluster display tidb-test

tidb 对应mysql conf文件_TIDB_04


这样 pump 和 drainer 就已经部署好了,但是如果试下在tidb中添加数据,并不会同步给mysql,此时是因为Tidb集群需要开启binlog。

开启binlog

tiup cluster edit-config tidb-test

tidb 对应mysql conf文件_分布式_05

添加下面东西:

server_configs:
  tidb:
    binlog.enable: true
    binlog.ignore-error: true

重载配置文件:

tiup cluster reload tidb-test

tidb 对应mysql conf文件_数据库_06


重新配置后,可以在Tidb客户端,查看binlog开启状态:

show variables like "log_bin";

tidb 对应mysql conf文件_TIDB_07


ON即为开启状态。

看下pump和drainer的状态:

show pump status;

tidb 对应mysql conf文件_TIDB_08

show drainer status;

tidb 对应mysql conf文件_tidb 对应mysql conf文件_09


状态都为online在线状态。

三、测试数据同步

在TIDB中添加一行数据:

tidb 对应mysql conf文件_mysql_10

在mysql中查看数据:

tidb 对应mysql conf文件_分布式_11


已经同步成功了。

四、binlogctl使用

1. 安装binlogctl

wget https://download.pingcap.org/tidb-v5.0.0-linux-amd64.tar.gz
tar xvf tidb-v5.0.0-linux-amd64.tar.gz
cd tidb-v5.0.0-linux-amd64/bin/

查看 pump 节点的状态

./binlogctl -pd-urls=http://192.168.40.160:2379 -cmd pumps

查看 drainer 节点的状态

./binlogctl -pd-urls=http://192.168.40.160:2379 -cmd drainers

暂停 drainer 节点

./binlogctl -pd-urls=http://192.168.40.160:2379 -cmd pause-drainer -node-id

重新启动drainer,进入安装drainer主机:

cd /tidb-deploy/drainer-8249/bin/
./drainer -pd-urls=http://192.168.40.160:2379 -config ../conf/drainer.toml