TIDB - 使用 TiDB Binlog 实现数据复制

Posted 小毕超

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TIDB - 使用 TiDB Binlog 实现数据复制相关的知识,希望对你有一定的参考价值。

一、TiDB Binlog简介

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

TiDB Binlog 整体架构


注意:

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

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

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

当前的集群情况:

tiup cluster display tidb-test


一台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
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"

注意pump_servers,要和tidb-server在一个节点。

3. 开始扩容

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


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

tiup cluster display tidb-test


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

开启binlog

tiup cluster edit-config tidb-test

添加下面东西:

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

重载配置文件:

tiup cluster reload tidb-test


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

show variables like "log_bin";


ON即为开启状态。

看下pump和drainer的状态:

show pump status;

show drainer status;


状态都为online在线状态。

三、测试数据同步

在TIDB中添加一行数据:

在mysql中查看数据:


已经同步成功了。

四、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


喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

以上是关于TIDB - 使用 TiDB Binlog 实现数据复制的主要内容,如果未能解决你的问题,请参考以下文章

TIDB - 使用 TiDB Binlog 将日志同步至下游 Kafka 中

TIDB - 使用 TICDC 将数据同步至下游 Mysql 中

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB

tidb同步mysql

Flink 最佳实践之使用 Canal 同步 MySQL 数据至 TiDB