TiDB Binlog 集群部署
推荐使用 TiUP 部署 TiDB Binlog。即在使用 TiUP 部署 TiDB 时,在拓扑文件中添加 TiDB Binlog 的 和 pump
节点信息后,再随 TiDB 一起部署。详细部署方式参考 。
检查文件完整性,返回 ok 则正确:
sha256sum -c tidb-{version}-linux-amd64.sha256
对于 v2.1.0 GA 及以上版本,Pump 和 Drainer 已经包含在 TiDB 的下载包中,其他版本需要单独下载 Pump 和 Drainer:
wget https://download.pingcap.org/tidb-binlog-latest-linux-amd64.tar.gz &&
wget https://download.pingcap.org/tidb-binlog-latest-linux-amd64.sha256
检查文件完整性,返回 ok 则正确:
使用样例
假设有三个 PD,一个 TiDB,另外有两台机器用于部署 Pump,一台机器用于部署 Drainer。各个节点信息如下:
TiDB="192.168.0.10"
PD1="192.168.0.16"
PD2="192.168.0.15"
PD3="192.168.0.14"
Pump="192.168.0.11"
Pump="192.168.0.12"
Drainer="192.168.0.13"
下面以此为例,说明 Pump/Drainer 的使用。
-
Pump 命令行参数说明(以在 “192.168.0.11” 上部署为例)
Usage of Pump:
-L string
日志输出信息等级设置:debug,info,warn,error,fatal (默认 "info")
-V
打印版本信息
-addr string
Pump 提供服务的 RPC 地址(-addr="192.168.0.11:8250")
-advertise-addr string
Pump 对外提供服务的 RPC 地址(-advertise-addr="192.168.0.11:8250")
-config string
配置文件路径,如果你指定了配置文件,Pump 会首先读取配置文件的配置;
如果对应的配置在命令行参数里面也存在,Pump 就会使用命令行参数的配置来覆盖配置文件里的配置。
-data-dir string
Pump 数据存储位置路径
-gc int
Pump 只保留多少天以内的数据 (默认 7)
-heartbeat-interval int
Pump 向 PD 发送心跳间隔 (单位 秒)
-log-file string
-log-rotate string
-metrics-addr string
Prometheus Pushgateway 地址,不设置则禁止上报监控信息
-metrics-interval int
监控信息上报频率 (默认 15,单位 秒)
-node-id string
Pump 节点的唯一识别 ID,如果不指定,程序会根据主机名和监听端口自动生成
-pd-urls string
PD 集群节点的地址 (-pd-urls="http://192.168.0.16:2379,http://192.168.0.15:2379,http://192.168.0.14:2379")
-fake-binlog-interval int
Pump 节点生成 fake binlog 的频率 (默认 3,单位 秒)
Pump 配置文件(以在 “192.168.0.11” 上部署为例)
启动示例
./bin/pump -config pump.toml
如果命令行参数与配置文件中的参数重合,则使用命令行设置的参数的值。
使用 binary 部署 Drainer
Drainer 命令行参数说明(以在 “192.168.0.13” 上部署为例)
Usage of Drainer
-L string
日志输出信息等级设置:debug,info,warn,error,fatal (默认 "info")
-V
打印版本信息
-addr string
Drainer 提供服务的地址(-addr="192.168.0.13:8249")
-c int
同步下游的并发数,该值设置越高同步的吞吐性能越好 (default 1)
-cache-binlog-count int
缓存中的 binlog 数目限制(默认 8)
如果上游的单个 binlog 较大导致 Drainer 出现 OOM 时,可尝试调小该值减少内存使用
-config string
配置文件路径,Drainer 会首先读取配置文件的配置;
如果对应的配置在命令行参数里面也存在,Drainer 就会使用命令行参数的配置来覆盖配置文件里面的配置
-data-dir string
Drainer 数据存储位置路径 (默认 "data.drainer")
-dest-db-type string
Drainer 下游服务类型 (默认为 mysql,支持 tidb、kafka、file)
向 PD 查询在线 Pump 的时间间隔 (默认 10,单位 秒)
是否禁用冲突监测
-disable-dispatch
是否禁用拆分单个 binlog 的 SQL 的功能,如果设置为 true,则每个 binlog
按顺序依次还原成单个事务进行同步(下游服务类型为 MySQL,该项设置为 False)
-ignore-schemas string
db 过滤列表 (默认 "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,test"),
不支持对 ignore schemas 的 table 进行 rename DDL 操作
-initial-commit-ts(默认为 `-1`)
如果 Drainer 没有相关的断点信息,可以通过该项来设置相关的断点信息
该参数值为 `-1` 时,Drainer 会自动从 PD 获取一个最新的时间戳
-log-file string
log 文件路径
-log-rotate string
log 文件切换频率,hour/day
-metrics-addr string
Prometheus Pushgateway 地址,不设置则禁止上报监控信息
-metrics-interval int
监控信息上报频率(默认 15,单位:秒)
-node-id string
drainer 节点的唯一识别 ID,如果不指定,程序会根据主机名和监听端口自动生成
-pd-urls string
PD 集群节点的地址 (-pd-urls="http://192.168.0.16:2379,http://192.168.0.15:2379,http://192.168.0.14:2379")
-safe-mode
是否开启安全模式使得下游 MySQL/TiDB 可被重复写入
即将 insert 语句换为 replace 语句,将 update 语句拆分为 delete + replace 语句
-txn-batch int
输出到下游数据库一个事务的 SQL 数量(默认 1)
启动示例
初次启动时使用参数
initial-commit-ts
, 命令如下:./bin/drainer -config drainer.toml -initial-commit-ts {initial-commit-ts}
如果命令行参数与配置文件中的参数重合,则使用命令行设置的参数的值。
注意:
- 在运行 TiDB 时,需要保证至少一个 Pump 正常运行。
- 通过给 TiDB 增加启动参数
enable-binlog
来开启 binlog 服务。尽量保证同一集群的所有 TiDB 都开启了 binlog 服务,否则在同步数据时可能会导致上下游数据不一致。如果要临时运行一个不开启 binlog 服务的 TiDB 实例,需要在 TiDB 的配置文件中设置run_ddl= false
。- Drainer 不支持对 ignore schemas(在过滤列表中的 schemas)的 table 进行 rename DDL 操作。
- 在已有的 TiDB 集群中启动 Drainer,一般需要全量备份并且获取快照时间戳,然后导入全量备份,最后启动 Drainer 从对应的快照时间戳开始同步增量数据。
- 如果存在上游 TiDB 能运行但下游 MySQL 不支持的 DDL 语句时(例如下游 MySQL 使用 InnoDB 引擎时同步语句
CREATE TABLE t1(a INT) ROW_FORMAT=FIXED;
),Drainer 也会同步失败,此时可以在 Drainer 配置中跳过该事务,同时在下游手动执行兼容的语句,详见。