TiDB 开启 binlog

作者: CocaLi | 来源:发表于2019-05-05 21:18 被阅读188次

    TiDB 中如何开启增量备份模式,答案就是通过 binlog 组件,关于 tidb-binlog 的架构可以参考官网,这里只简单记录如何 step by step 开启 binlog 功能。

    一、部署 pump 组件

    1、编辑 inventory.ini 配置文件,添加 pump服务器的配置,默认可以和 tidb-server 一起部署

    pump1 ansible_host=172.16.3.51 deploy_dir=/home/tidb/deploy/pump

    pump2 ansible_host=172.16.3.52 deploy_dir=/home/tidb/deploy/pump

    pump3 ansible_host=172.16.3.53 deploy_dir=/home/tidb/deploy/pump    


    2、执行 deploy 操作

    ansible-playbook deploy.yml --tags=pump


    3、启动 pump 服务

    ansible-playbook start.yml --tags=pump


    4、更新并重启 tidb-server

    ansible-playbook rolling_update.yml --tags=tidb


    5、更新监控信息

    ansible-playbook rolling_update_monitor.yml --tags=prometheus


    6、通过 binlogctl 查看 pump 状态是否正常

    binlogctl -pd-urls=http://pd-ip:2379 -cmd pumps

    [tidb@node1 tidb-ansible]$ ./resources/bin/binlogctl -pd-urls=http://172.16.3.51:2379 -cmd pumps

    [2019/04/28 21:29:25.780 +08:00] [INFO] [nodes.go:47] ["query node"] [type=pump] [node="{NodeID: node1:8250, Addr: 172.16.3.51:8250, State: online, MaxCommitTS: 408016168519204865, UpdateTime: 2019-04-28 21:29:24 +0800 CST}"]

    [2019/04/28 21:29:25.780 +08:00] [INFO] [nodes.go:47] ["query node"] [type=pump] [node="{NodeID: node2:8250, Addr: 172.16.3.52:8250, State: online, MaxCommitTS: 408016168558526465, UpdateTime: 2019-04-28 21:29:24 +0800 CST}"]

    [2019/04/28 21:29:25.780 +08:00] [INFO] [nodes.go:47] ["query node"] [type=pump] [node="{NodeID: node3:8250, Addr: 172.16.3.53:8250, State: online, MaxCommitTS: 408016168296382465, UpdateTime: 2019-04-28 21:29:23 +0800 CST}"]


    7、通过 binlogctl 获取drainer 初次启动所需要的 tso 信息

    ./resources/bin/binlogctl -pd-urls=http://pd-ip:2379 -cmd generate_meta

    [tidb@node1 tidb-ansible]$ ./resources/bin/binlogctl -pd-urls=http://172.16.3.51:2379 -cmd generate_meta

    INFO[0000] [pd] create pd client with endpoints [http://172.16.3.51:2379]

    INFO[0000] [pd] leader switches to: http://172.16.3.53:2379, previous: 

    INFO[0000] [pd] init cluster id 6684771076978537216   

    [2019/04/28 21:31:43.259 +08:00] [INFO] [meta.go:124] ["save meta"] [meta="commitTS: 408016205442187267"]



    二、构造测试数据

    MySQL [(none)]> create database dky_test1;

    Query OK, 0 rows affected (1.44 sec)

    MySQL [(none)]> use dky_test1;

    Database changed

    MySQL [dky_test1]> create table t1(id int auto_increment key,  name char(10));

    Query OK, 0 rows affected (1.28 sec)

    MySQL [dky_test1]> insert into t1 (name) values ('a'), ('b'), ('c');

    Query OK, 3 rows affected (1.62 sec)

    Records: 3  Duplicates: 0  Warnings: 0

    MySQL [dky_test1]> select * from t1;

    +----+------+

    | id | name |

    +----+------+

    |  1 | a    |

    |  2 | b    |

    |  3 | c    |

    +----+------+

    3 rows in set (0.00 sec)




    三、用 mydumper 做一个全量备份

    sudo su

    yum install wget

    wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz

    mydumper -h 172.16.3.51 -P 4000 -u root -B dky_test1 --skip-tz-utc -o /home/tidb/deploy/tidb_bak



    四、部署 drainer 组件

    首先需要了解 tidb-binlog 的三种 输出模式,分别为 MySQL / TIDB,PB(增量文件)和 Kafka,下面以 pb 模式为例,讲解如何配置

    1、编辑 inventory.ini 配置,添加 drainer 的配置项

    如果是 pb(增量文件)的方式,配置如下

    drainer_pb ansible_host=172.16.3.53 initial_commit_ts="408016205442187267"

    #如果是 mysql 的方式,配置如下

    #drainer_mysql ansible_host=172.16.3.53 initial_commit_ts="408016205442187267"

    2、修改 drainer 配置文件模板

    cd /home/tidb/tidb-ansible/conf

    cp drainer-cluster.toml drainer_pb_drainer-cluster.toml

    修改下面的配置项,

    db-type = "pb"

    注释掉默认 mysql 的连接串配置,取消注释下面三行,默认在 deploy_dir 目录下的 data.drainer

    注意不要配置压缩 compression 的选项,否则目前版本的 reparo 解析增量 binlog 文件可能会有问题

    [syncer.to]

    dir = "data.drainer"

    # compression = "gzip"

    3、部署 drainer

    ansible-playbook deploy_drainer.yml

    4、启动 drainer

    ansible-playbook start_drainer.yml


    五、测试增量恢复

    解析 tidb-binlog 文件是通过一个叫 reparo 的工具来实现,这个工具包目前是集成在 binlog 的工具集里面,大家能够直接下载,近期应该也会随 binlog 一起开源。

    reparo 的下载及配置说明请参考官网,https://pingcap.com/docs-cn/tools/binlog/reparo/#reparo-使用文档

    可以通过配置datetime 时间戳,或者 tso 来解析指定某一段时间的 binlog,测试时可以配置dest-type = "print" 将解析出的 binlog 打印到屏幕



    六、tidb-binlog 常见问题 FAQ

    1、已经部署 tidb-server 的情况下,是否可以后期再开启 binlog 功能?

    可以,按照上面的步骤操作即可,不过会有一次 tidb-server 滚动重启的过程,而且一定要所有的 tidb-server 都开启 binlog 功能,不支持只开启部分 tidb-server 的 binlog 功能。

    2、是否支持 tidb-binlog 不会影响 tidb-server 的运行?

    默认场景下,我们认为既然要开启 binlog,那么就需要保证所有 tidb-server 的操作都要被记录到,如果 binlog 功能异常,默认配置下 tidb-server 是会被阻塞的,但是这个功能可以通过配置关闭,具体的参数是在 tidb.toml

    [binlog]

    ignore-error = false

    3、如果希望 tidb-binlog 的内容被多个系统调用,如何实现,例如搭建一套 tidb 从库,同时又希望开启增量备份文件?

    可以通过部署多个 drainer 模块来实现,如果多个 drainer 是部署在同一台服务器上,需要配置不同的监控端口。

    相关文章

      网友评论

        本文标题:TiDB 开启 binlog

        本文链接:https://www.haomeiwen.com/subject/tslkoqtx.html