TiDB Binlog 配置说明

本文档介绍 TiDB Binlog 的各项配置说明。

Pump

本节介绍 Pump 的配置项。可以在 Pump Configuration 中查看完整的 Pump 配置文件示例。

addr

  • HTTP API 的监听地址,格式为 host:port
  • 默认:"127.0.0.1:8250"

advertise-addr

  • 对外可访问的 HTTP API 地址。这个地址会被注册到 PD,格式为 host:port
  • 默认:与 addr 的配置相同。

socket

  • HTTP API 监听的 Unix socket 地址。
  • 默认:""

pd-urls

  • 由逗号分隔的 PD URL 列表。如果指定了多个地址,PD 客户端在连接一个地址时出错时会自动尝试连接另一个地址。
  • 默认:"http://127.0.0.1:2379"

data-dir

  • 本地存放 binlog 及其索引的目录。
  • 默认:"data.pump"

heartbeat-interval

  • 心跳间隔,即每隔指定秒数向 PD 汇报最新的状态。
  • 默认:2

gen-binlog-interval

  • 指定写入 fake binlog 的间隔秒数。
  • 默认:3

gc

  • 指定 binlog 可在本地存储的天数(整型)。超过指定天数的 binlog 会被自动删除。
  • 默认:7

log-file

  • 保存日志文件的路径。如果为空,日志不会被保存。
  • 默认:""

log-level

  • Log 等级。
  • 默认:"info"

node-id

  • Pump 节点的 ID,用于在集群中识别这个进程。
  • 默认:主机名:端口号,例如 node-1:8250

security

以下是与安全相关的配置项。

ssl-ca

  • 包含可信 SSL 证书或 CA 证书列表的文件路径,例如 /path/to/ca.pem
  • 默认:""

ssl-cert

  • 包含 PEM 格式编码的 X509 证书文件路径,例如 /path/to/pump.pem
  • 默认:""

ssl-key

  • 包含 PEM 格式编码的 X509 Key 文件路径,例如 /path/to/pump-key.pem
  • 默认:""

storage

以下是与存储相关的配置项。

sync-log

  • 指定是否在每次批量写入 binlog 后使用 fsync 以确保数据安全。
  • 默认:true

kv_chan_cap

  • 在 Pump 接收写入请求时会先将请求放入一个缓冲区,该项指定缓冲区能存放的请求数量。
  • 默认:1048576(即 2 的 20 次方)

slow_write_threshold

  • 写入单个 binlog 的耗时超过该项设定的秒数就被认为是慢写入,并输出一条包含 "take a long time to write binlog" 的日志。
  • 默认:1

stop-write-at-available-space

  • 可用存储空间低于指定值时不再接收 binlog 写入请求。可以用例如 900 MB5 GB12 GiB 的格式指定空间大小。如果集群中 Pump 节点多于一个,那么在某个 Pump 节点因为空间不足而拒绝写入时,TiDB 端会自动写入到其他 Pump 节点。
  • 默认:10 GiB

kv

目前 Pump 的存储是基于 GoLevelDB 实现的。storage 下还有一个 kv 子分组可以用于调整 GoLevelDB 的配置,支持的配置项包括:

  • block-cache-capacity
  • block-restart-interval
  • block-size
  • compaction-L0-trigger
  • compaction-table-size
  • compaction-total-size
  • compaction-total-size-multiplier
  • write-buffer
  • write-L0-pause-trigger
  • write-L0-slowdown-trigger

配置具体含义可在 GoLevelDB 文档中查看。

Drainer

本节介绍 Drainer 的配置项。可以在 Drainer Configuration 中查看完整的配置文件示例。

addr

  • HTTP API 的监听的地址,格式为 host:port
  • 默认:"127.0.0.1:8249"

advertise-addr

  • 对外可访问的 HTTP API 地址,这个地址会被注册到 PD,格式为 host:port
  • 默认:设定成与 addr 相同的配置

log-file

  • 日志的文件保存路径。如果为空,日志不会被保存。
  • 默认:""

log-level

  • Log 等级。
  • 默认:"info"

node-id

  • Drainer 节点 ID,用于在集群中识别这个进程。
  • 默认:主机名:端口号,例如 node-1:8249

data-dir

  • 用于存放 Drainer 运行中需要保存的文件的目录。
  • 默认:"data.drainer"

detect-interval

  • 每隔指定秒数从 PD 更新一次 Pumps 信息,以获取节点加入或离开等事件。
  • 默认:5

pd-urls

  • 由逗号分隔的 PD URL 列表。如果指定了多个地址,PD 客户端在连接一个地址出错时会自动尝试连接另一个地址。
  • 默认:"http://127.0.0.1:2379"

initial-commit-ts

  • 指定从哪个事务提交时间点(事务的 commit ts) 之后开始同步。这个配置仅适用于初次开始同步的 Drainer 节点。如果下游已经有 checkpoint 存在,则会根据 checkpoint 里记录的时间进行同步。
  • commit ts(即 commit timestamp)是 TiDB 事务的提交时间点。该时间点是从 PD 获取的全局唯一递增的时间戳,作为当前事务的唯一 ID。典型的 initial-commit-ts 配置可以通过以下方式获得:
    • BR 备份的元信息(即 backupmeta)中记录的 backup TS
    • Dumpling 备份的元信息(即 metadata)中记录的 Pos
    • PD Control 中 tso 命令返回的结果
  • 默认:-1。Drainer 会从 PD 得到一个最新的 timestamp 作为初始时间。即从当前的时间点开始同步。

synced-check-time

  • 通过 HTTP API 访问 /status 路径可以查询 Drainer 同步的状态。synced-check-time 指定距离上次成功同步的时间超过多少分钟可以认为是 synced,即同步完成。
  • 默认:5

compressor

  • 指定 Pump 与 Drainer 间的数据传输所用的压缩算法。目前仅支持一种算法,即 gzip
  • 默认:"",表示不压缩。

security

以下是与 Drainer 安全相关的配置。

ssl-ca

  • 包含可信 SSL 证书或 CA 证书列表的文件路径,例如 /path/to/ca.pem
  • 默认:""

ssl-cert

  • 包含 PEM 格式编码的 X509 证书文件路径,例如 /path/to/drainer.pem
  • 默认:""

ssl-key

  • 包含 PEM 格式编码的 X509 Key 文件路径,例如 /path/to/drainer-key.pem
  • 默认:""

syncer

syncer 分组包含一些与同步下游相关的配置项。

db-type

下游类型,目前支持的选项有:

  • mysql
  • tidb
  • kafka
  • file

默认:mysql

sql-mode

  • 当下游为 mysql/tidb 类型时,可以指定 SQL mode,如果超过一个 mode,则用逗号隔开。
  • 默认:""

ignore-txn-commit-ts

  • 同步时,该项所指定的 commit timestamp 的 binlog 会被忽略,例如 [416815754209656834, 421349811963822081]
  • 默认:[]

ignore-schemas

  • 同步时忽略指定数据库的变更。如果超过一个需忽略的数据库,则用逗号隔开。如果一个 binlog 中的变更全部被过滤掉,则忽略整个 binlog。
  • 默认:"INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql"

ignore-table

同步时忽略指定表格的变更。在 toml 中可以用以下方式指定多个需忽略的表格:

  1. [[syncer.ignore-table]]
  2. db-name = "test"
  3. tbl-name = "log"
  4. [[syncer.ignore-table]]
  5. db-name = "test"
  6. tbl-name = "audit"

如果一个 binlog 中的变更全部被过滤掉,则忽略整个 binlog。

默认:[]

replicate-do-db

  • 指定要同步的数据库,例如 [db1, db2]
  • 默认:[]

replicate-do-table

指定要同步的表格,示例如下:

  1. [[syncer.replicate-do-table]]
  2. db-name ="test"
  3. tbl-name = "log"
  4. [[syncer.replicate-do-table]]
  5. db-name ="test"
  6. tbl-name = "~^a.*"

默认:[]

txn-batch

  • 当下游为 mysql/tidb 类型时,会将 DML 分批执行。这个配置可以用于设置每个事务中包含多少个 DML。
  • 默认:20

worker-count

  • 当下游为 mysql/tidb 类型时,会并发执行 DML,worker-count 可以指定并发数。
  • 默认:16

disable-dispatch

  • 关掉并发,强制将 worker-count 置为 1
  • 默认:false

safe-mode

如果打开 Safe mode,Drainer 会对同步的变更作以下修改,使其变成可重入的操作:

  • Insert 变为 Replace Into
  • Update 变为 DeleteReplace Into

默认:false

syncer.to

不同类型的下游配置都在 syncer.to 分组。以下按配置类型进行介绍。

mysql/tidb

用于连接下游数据库的配置项:

  • host:如果没有设置,会尝试检查环境变量 MYSQL_HOST,默认值为 "localhost"
  • port:如果没有设置,会尝试检查环境变量 MYSQL_PORT,默认值为 3306
  • user:如果没有设置,会尝试检查环境变量 MYSQL_USER,默认值为 "root"
  • password:如果没有设置,会尝试检查环境变量 MYSQL_PSWD,默认值为 ""
  • read-timeout:指定下游数据库连接的 IO 读取超时时间,默认值为 1m。如果 drainer 在一些耗时长的 DDL 上不断失败,你可以将这个变量设置为更大的值。

file

  • dir:指定用于保存 binlog 的目录。如果不指定该项,则使用 data-dir

kafka

当下游为 kafka 时,有效的配置包括:

  • zookeeper-addrs
  • kafka-addrs
  • kafka-version
  • kafka-max-messages
  • kafka-max-message-size
  • topic-name

syncer.to.checkpoint

  • type:指定用哪种方式保存同步进度,目前支持的选项为 mysqltidbfile

    该配置选项默认与下游类型相同。例如 file 类型的下游 checkpoint 进度保存在本地文件 <data-dir>/savepoint 中,mysql 类型的下游进度保存在下游数据库。当明确指定要使用 mysqltidb 保存同步进度时,需要指定以下配置项:

  • schema:默认为 "tidb_binlog"

    Pump - 图1

    注意

    在同个 TiDB 集群中部署多个 Drainer 时,需要为每个 Drainer 节点指定不同的 checkpoint schema,否则两个实例的同步进度会互相覆盖。

  • host

  • user

  • password

  • port