美文网首页
TiDB集群的启停及备份恢复

TiDB集群的启停及备份恢复

作者: super_pcm | 来源:发表于2019-08-01 16:22 被阅读0次

    1. 常见的运维操作

    • 启动集群
      此操作会按顺序启动整个 TiDB 集群所有组件(包括 PD、TiDB、TiKV 等组件和监控组件)。
    ansible-playbook start.yml
    
    • 关闭集群
      此操作会按顺序关闭整个 TiDB 集群所有组件(包括 PD、TiDB、TiKV 等组件和监控组件)。
    ansible-playbook stop.yml
    
    • 清除集群数据
      此操作会关闭 TiDB、Pump、TiKV、PD 服务,并清空 Pump、TiKV、PD 数据目录。
    ansible-playbook unsafe_cleanup_data.yml
    
    • 销毁集群
      此操作会关闭集群,并清空部署目录,若部署目录为挂载点,会报错,可忽略。
    ansible-playbook unsafe_cleanup.yml
    

    2. 备份与恢复

    本文档将详细介绍如何对 TiDB 进行全量备份与恢复.
    这里我们假定 TiDB 服务信息如下:

    Name Address Port User Password
    TiDB 127.0.0.1 4000 root *

    在这个备份恢复过程中,我们会用到下面的工具:
    mydumper 从 TiDB 导出数据
    loader 导入数据到 TiDB

    2.1 下载 TiDB 工具集 (Linux)

    # 下载 tool 压缩包
    wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz
    wget http://download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256
    
    # 检查文件完整性,返回 ok 则正确
    sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256
    # 解开压缩包
    tar -xzf tidb-enterprise-tools-latest-linux-amd64.tar.gz
    cd tidb-enterprise-tools-latest-linux-amd64
    

    2.2 使用 mydumper/loader 全量备份恢复数据

    mydumper 是一个强大的数据备份工具,具体可以参考 点我,我是github
    可使用 mydumper 从 TiDB 导出数据进行备份,然后用 loader 将其导入到 TiDB 里面进行恢复。

    注意:
    必须使用企业版工具集包的 mydumper,不要使用你的操作系统的包管理工具提供的 mydumper。mydumper 的上游版本并不能对 TiDB 进行正确处理 (#155)。由于使用 mysqldump 进行数据备份和恢复都要耗费许多时间,这里也并不推荐。

    2.3 mydumper/loader 全量备份恢复最佳实践

    为了快速的备份恢复数据 (特别是数据量巨大的库), 可以参考以下建议:

    • 使用 mydumper 导出来的数据文件尽可能的小, 最好不要超过 64M, 可以设置参数 -F 64
    • loader的 -t 参数可以根据 tikv 的实例个数以及负载进行评估调整,例如 3个 tikv 的场景, 此值可以设为 3 *(1 ~ n);当 tikv 负载过高,loader 以及 tidb 日志中出现大量 backoffer.maxSleep 15000ms is exceeded 可以适当调小该值,当 tikv 负载不是太高的时候,可以适当调大该值。

    2.3.1 从 TiDB 备份数据

    我们使用 mydumper 从 TiDB 备份数据,如下:

    ./bin/mydumper -h 127.0.0.1 -P 4000 -u root -t 16 -F 64 -B test -T t1,t2 --skip-tz-utc -o /tmp/test
    

    上面,我们使用 -B test 表明是对 test 这个 database 操作,然后用 -T t1,t2 表明只导出 t1t2 两张表。
    -t 16 表明使用 16 个线程去导出数据。-F 64 是将实际的 table 切分成多大的 chunk,这里就是 64MB 一个 chunk。
    --skip-tz-utc 添加这个参数忽略掉 TiDB 与导数据的机器之间时区设置不一致的情况,禁止自动转换。

    如果 mydumper 出现以下报错:

    ** (mydumper:27528): CRITICAL **: 13:25:09.081: Could not read data from testSchema.testTable: GC life time is shorter than transaction duration, transaction starts at 2019-08-05 21:10:01.451 +0800 CST, GC safe point is 2019-08-05 21:14:53.801 +0800 CST
    

    上面的提示说是读取不到对应的表信息,建议调整GC的时间。由于TIDB使用的是乐观锁和MVCC,其中MVCC的版本默认保存10分钟。如果你的mydumper操作超过10分钟的话,那就有可能会出现上面的情况,这时候需要手动调大GC的时间。

    ##查询GC设置的值
    SELECT * FROM mysql.tidb WHERE VARIABLE_NAME = 'tikv_gc_life_time';
    
    ##设置GC的值为720h
    update mysql.tidb set VARIABLE_VALUE = '720h' where VARIABLE_NAME = 'tikv_gc_life_time';
    

    执行 mydumper 命令后,将 TiDB 集群的 GC 值恢复到初始值。

    update mysql.tidb set VARIABLE_VALUE = '10m' where VARIABLE_NAME = 'tikv_gc_life_time';
    

    2.3.2 向 TiDB 恢复数据

    我们使用 loader 将之前导出的数据导入到 TiDB,完成恢复操作。Loader 的下载和具体的使用方法见 Loader 使用文档

    ./bin/loader -h 127.0.0.1 -u root -P 4000 -t 32 -d /tmp/test
    

    导入成功之后,我们可以用 MySQL 官方客户端进入 TiDB,查看:

    mysql -h127.0.0.1 -P4000 -uroot
    

    相关文章

      网友评论

          本文标题:TiDB集群的启停及备份恢复

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