binlogctl 工具

Binlog Control(以下简称 binlogctl)是 TiDB Binlog 的命令行工具,用于管理 TiDB Binlog 集群。

binlogctl 支持如下这些功能:

  • 查看 Pump/Drainer 状态
  • 暂停/下线 Pump/Drainer
  • Pump/Drainer 异常状态处理

使用 binlogctl 的场景:

  • 同步出现故障/检查运行情况,需要查看 Pump/Drainer 的状态
  • 维护集群,需要暂停/下线 Pump/Drainer
  • Pump/Drainer 异常退出,状态没有更新,或者状态不符合预期,对业务造成影响

binlogctl 下载

binlogctl 的安装包位于 TiDB 离线工具包中。下载方式,请参考 TiDB 工具下载

binlogctl 使用说明

命令行参数:

Usage of binlogctl: -V 输出 binlogctl 的版本信息 -cmd string 命令模式,包括 "generate_meta"(已废弃), "pumps", "drainers", "update-pump" ,"update-drainer", "pause-pump", "pause-drainer", "offline-pump", "offline-drainer" -data-dir string 保存 Drainer 的 checkpoint 的文件的路径 (默认 "binlog_position")(已废弃) -node-id string Pump/Drainer 的 ID -pd-urls string PD 的地址,如果有多个,则用"," 连接 (默认 "http://127.0.0.1:2379") -ssl-ca string SSL CAs 文件的路径 -ssl-cert string PEM 格式的 X509 认证文件的路径 -ssl-key string PEM 格式的 X509 key 文件的路径 -time-zone string 如果设置时区,在 "generate_meta" 模式下会打印出获取到的 tso 对应的时间。例如 "Asia/Shanghai" 为 CST 时区,"Local" 为本地时区 -show-offline-nodes 在用 `-cmd pumps` 或 `-cmd drainers` 命令时使用,这两个命令默认不显示 offline 的节点,仅当明确指定 `-show-offline-nodes` 时会显示

命令示例:

  • 查询所有的 Pump/Drainer 的状态:

    设置 cmdpumps 或者 drainers 来查看所有 Pump 或者 Drainer 的状态。例如:

    bin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd pumps
    [2019/04/28 09:29:59.016 +00:00] [INFO] [nodes.go:48] ["query node"] [type=pump] [node="{NodeID: 1.1.1.1:8250, Addr: pump:8250, State: online, MaxCommitTS: 408012403141509121, UpdateTime: 2019-04-28 09:29:57 +0000 UTC}"]
    bin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd drainers
    [2019/04/28 09:29:59.016 +00:00] [INFO] [nodes.go:48] ["query node"] [type=drainer] [node="{NodeID: 1.1.1.1:8249, Addr: 1.1.1.1:8249, State: online, MaxCommitTS: 408012403141509121, UpdateTime: 2019-04-28 09:29:57 +0000 UTC}"]
  • 暂停/下线 Pump/Drainer

    binlogctl 提供以下命令暂停/下线服务:

    cmd说明示例
    pause-pump暂停 Pumpbin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd pause-pump -node-id ip-127-0-0-1:8250
    pause-drainer暂停 Drainerbin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd pause-drainer -node-id ip-127-0-0-1:8249
    offline-pump下线 Pumpbin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd offline-pump -node-id ip-127-0-0-1:8250
    offline-drainer下线 Drainerbin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd offline-drainer -node-id ip-127-0-0-1:8249

    binlogctl 会发送 HTTP 请求给 Pump/Drainer,Pump/Drainer 收到命令后会主动执行对应的退出流程。

  • 异常情况下修改 Pump/Drainer 的状态

    在服务正常运行以及符合流程的暂停、下线过程中,Pump/Drainer 的状态都是可以正确的。但是在一些异常情况下 Pump/Drainer 无法正确维护自己的状态,可能会影响数据同步任务,在这种情况下需要使用 binlogctl 修复状态信息。

    设置 cmdupdate-pump 或者 update-drainer 来更新 Pump 或者 Drainer 的状态。Pump 和 Drainer 的状态可以为 paused 或者 offline。例如:

    bin/binlogctl -pd-urls=http://127.0.0.1:2379 -cmd update-pump -node-id ip-127-0-0-1:8250 -state paused