本文介绍备份 TiDB 集群的方式,包括:

  • 备份 TiDB 集群快照
  • 备份单个数据库的数据
  • 备份单张表的数据
  • 使用表库过滤功能备份多张表的数据
  • 备份数据到远端存储
  • 备份 TiDB 集群增量数据
  • 备份数据加密

如果你还不熟悉备份工具,建议先阅读以下文档,充分了解备份工具的使用方法和限制:

  • 备份工具简介
  • 备份工具命令行介绍

如果需要全量备份少量数据(例如小于 50 GB),且不要求备份速度,也可以选择 Dumpling 导出数据,实现备份。具体备份操作,参考使用 Dumpling 备份全量数据。

备份 TiDB 集群快照

TiDB 集群快照数据是只包含某个物理时间点上集群满足事务一致性的数据。使用 br backup full 可以备份 TiDB 最新的或者指定时间点的快照数据。执行 br backup full --help 可获取该命令的使用帮助。

用例:将时间为 '2022-01-30 07:42:23' 的集群快照数据备份到 S3 的名为 backup-data bucket 下的 2022-01-30/ 前缀目录中。

br backup full \ --pd "${PDIP}:2379" \ --backupts '2022-01-30 07:42:23' \ --storage "s3://backup-data/2022-01-30/" \ --ratelimit 128 \ --log-file backupfull.log

以上命令中:

  • --backupts:快照对应的物理时间点。如果该快照的数据被 GC 了,那么 br backup 命令会报错退出;如果你没有指定该参数,那么 BR 会选取备份开始的时间点所对应的快照。
  • --ratelimit每个 TiKV 执行备份任务的速度上限(单位 MiB/s)。
  • --log-file:BR log 写入的目标文件。

备份期间有进度条在终端中显示,显示效果如下。当进度条前进到 100% 时,说明备份已完成。

br backup full \ --pd "${PDIP}:2379" \ --storage "s3://backup-data/2022-01-30/" \ --ratelimit 128 \ --log-file backupfull.log Full Backup <---------/................................................> 17.12%.

在完成备份后,BR 会将备份数据的 checksum 同集群 admin checksum table 的结果比较,以确保备份数据正确性。

备份 TiDB 集群的指定库表的数据

BR 支持只备份集群快照和增量数据中指定库/表的局部数据。该功能在快照备份和增量数据备份的基础上,过滤掉不需要的数据,帮助用户备份实现只备份关键业务的数据。

备份单个数据库的数据

要备份集群中指定单个数据库的数据,可使用 br backup db 命令。同样可通过 br backup db --help 来获取子命令 db 的使用帮助。

用例:将数据库 test 备份到 s3 的名为 backup-data 的 bucket 下面的 db-test/2022-01-30/ 前缀目录下。

br backup db \ --pd "${PDIP}:2379" \ --db test \ --storage "s3://backup-data/db-test/2022-01-30/" \ --ratelimit 128 \ --log-file backuptable.log

db 子命令的选项为 --db,用来指定数据库名。其他选项的含义与备份 TiDB 集群快照相同。

备份单张表的数据

要备份集群中指定单张表的数据,可使用 br backup table 命令。同样可通过 br backup table --help 来获取子命令 table 的使用帮助。

用例:将表 test.usertable 备份到 s3 的名为 backup-data 的 bucket 下面的 table-db-usertable/2022-01-30/ 前缀目录下。

br backup table \ --pd "${PDIP}:2379" \ --db test \ --table usertable \ --storage "s3://backup-data/table-db-usertable/2022-01-30/" \ --ratelimit 128 \ --log-file backuptable.log

table 子命令有 --db 和 --table 两个选项,分别用来指定数据库名和表名。其他选项的含义与备份 TiDB 集群快照相同。

使用表库过滤功能备份多张表的数据

如果你需要以更复杂的过滤条件来备份多个库/表,执行 br backup full 命令,并使用 --filter 或 -f 来指定表库过滤规则。

用例:以下命令将所有 db*.tbl* 形式的表格数据备份到 s3 的名为 backup-data 的 bucket 下面的 table-filter/2022-01-30/ 前缀目录下。

br backup full \ --pd "${PDIP}:2379" \ --filter 'db*.tbl*' \ --storage "s3://backup-data/table-filter/2022-01-30/" \ --ratelimit 128 \ --log-file backupfull.log

备份数据到远端存储

BR 支持将数据备份到 Amazon S3、Google Cloud Storage、Azure Blob Storage、NFS 或者实现 S3 协议的其他文件存储服务。下面逐一介绍如何备份数据到对应的备份存储中。

  • 使用 Amazon S3 存储备份数据
  • 使用 Google Cloud Storage 存储备份数据
  • 使用 Azure Blob Storage 存储备份数据

备份 TiDB 集群增量数据

警告

当前该功能为实验特性,不建议在生产环境中使用。

TiDB 集群增量数据包含某个时间段的起始和结束两个快照的差异变化的数据。 增量数据相对比快照数据而言数据量更小,适合配合快照备份一起使用,来减少备份的数据量。

如果想要备份增量数据,只需要使用 br backup 进行备份的时候指定上一次的备份时间戳 --lastbackupts 即可。你可以使用 validate 指令获取上一次备份的时间戳,示例如下:

LAST_BACKUP_TS=`br validate decode --field="end-version" -s s3://backup-data/2022-01-30/ | tail -n1`

注意

  • 增量备份数据需要与前一次快照备份数据保存在不同的路径下。
  • GC safepoint 必须在 lastbackupts 之前。TiDB 默认的 GC Lifetime 为 10 min,即默认 TiDB 只支持备份 10 min 内的增量数据。如果你希望备份更长时间的增量数据,则需要调整 TiDB 集群的 GC Lifetime 设置。

br backup full\ --pd ${PDIP}:2379 \ --ratelimit 128 \ --storage "s3://backup-data/2022-01-30/incr" \ --lastbackupts ${LAST_BACKUP_TS}

以上命令会备份 (LAST_BACKUP_TS, current PD timestamp] 之间的增量数据,以及这段时间内的 DDL。在恢复的时候,BR 会先把所有 DDL 恢复,而后才会恢复数据。

备份数据加密

警告

当前该功能为实验特性,不建议在生产环境中使用。

BR 支持在备份端,或备份到 Amazon S3 的时候在存储服务端,进行备份数据加密,用户可以根据自己情况选择其中一种使用。

备份端加密备份数据

自 TiDB v5.3.0 起,你可配置下列参数在备份过程中到达加密数据的效果:

  • --crypter.method:加密算法,支持 aes128-ctr/aes192-ctr/aes256-ctr 三种算法,缺省值为 plaintext,表示不加密
  • --crypter.key:加密密钥,十六进制字符串格式,aes128-ctr 对应 128 位(16 字节)密钥长度,aes192-ctr 为 24 字节,aes256-ctr 为 32 字节
  • --crypter.key-file:密钥文件,可直接将存放密钥的文件路径作为参数传入,此时 crypter.key 不需要传入

备份加密的示例如下:

br backup full\ --pd ${PDIP}:2379 \ --storage "s3://backup-data/2022-01-30/" \ --crypter.method aes128-ctr \ --crypter.key 0123456789abcdef0123456789abcdef

注意

  • 密钥丢失,备份的数据将无法恢复到集群中。
  • 加密功能需在 br 工具和 TiDB 集群都不低于 v5.3.0 的版本上使用,且加密备份得到的数据无法在低于 v5.3.0 版本的集群上恢复。

Amazon S3 存储服务端加密备份数据

BR 支持对备份到 S3 的数据进行 S3 服务端加密 (SSE)。BR S3 服务端加密也支持使用用户自行创建的 AWS KMS 密钥进行加密,详细信息请参考 BR S3 服务端加密。

校验备份数据

使用 BR 完成数据备份后,你可以对备份数据进行校验,包括检查备份数据是否完整,以及通过解码 backupmeta 来查看 TSO 等元信息。

检查备份数据的完整性

要检查数据完整性,可以执行 tiup br debug checksum 命令对备份数据计算校验和。

用例:在 Amazon S3 上名为 backup-data 的 bucket 下,计算 ${prefix} 前缀目录下备份的校验和。

br debug checksum \ --storage 's3://backup-data/${prefix}' \ --s3.endpoint '${S3-endpoint-URL}' \ --log-file checksum.log

将备份的 backupmeta 解码为 json 格式的可读文件

在备份完成后,可通过 tiup br debug decode 命令将备份的 backupmeta 解码为 json 格式的可读文件,从而查看快照对应的 TSO 等元信息。

用例:在 Amazon S3 上名为 backup-data 的 bucket 下,将 ${prefix} 前缀目录下备份的 backupmeta 解码为 json 格式的文件 backupmeta.json,解码后的文件存储路径为 s3://backup-data/${prefix}/backupmeta.json

br debug decode \ --storage 's3://backup-data/${prefix}' \ --s3.endpoint '${S3-endpoint-URL}' \ --log-file decode-backupmeta.log

然后打开 backupmeta.json 文件,搜索 end_version 可以查看到快照对应的 TSO。

如有需要,你也可以将 json 格式的 backupmeta 文件编码回解码前的状态。执行 tiup br debug encode 命令,生成的文件名为 backupmeta_from_json

用例:在 Amazon S3 上名为 backup-data 的 bucket 下,将 ${prefix} 前缀目录下备份的 backupmeta.json 文件编码为 backupmeta 文件,编码后的文件名为 backupmeta_from_json,存储路径为 s3://backup-data/${prefix}/backupmeta_from_json

br debug encode \ --storage 's3://backup-data/${prefix}' \ --s3.endpoint '${S3-endpoint-URL}' \ --log-file encode-backupmeta.log

备份性能和影响

TiDB 备份功能对集群性能(事务延迟和 QPS)有一定的影响,但是可以通过调整备份的线程数 backup.num-threads ,以及增加集群配置,来降低备份对集群性能的影响。

为了更加具体说明备份对集群的影响,这里列举了多次快照备份测试结论来说明影响的范围:

  • (使用 5.3 及之前版本)BR 在单 TiKV 存储节点上备份线程数量是节点 CPU 总数量的 75% 的时候,QPS 会下降到备份之前的 30% 左右。
  • (使用 5.4 及以后版本)当 BR 在单 TiKV 存储节点上备份的线程数量不大于 8、集群总 CPU 利用率不超过 80% 时,BR 备份任务对集群(无论读写负载)影响最大在 20% 左右。
  • (使用 5.4 及以后版本)当 BR 在单 TiKV 存储节点上备份的线程数量不大于 8、集群总 CPU 利用率不超过 75% 时,BR 备份任务对集群(无论读写负载)影响最大在 10% 左右。
  • (使用 5.4 及以后版本)当 BR 在单 TiKV 存储节点上备份的线程数量不大于 8、集群总 CPU 利用率不超过 60% 时,BR 备份任务对集群(无论读写负载)几乎没有影响。

通过限制备份的线程数量可以降低备份对集群性能的影响,但是这会影响到备份的性能,以上的多次备份测试结果显示:(单 TiKV 存储节点上)备份速度和备份线程数量呈正比,在线程数量量较少的时候,速度大概是 20M/线程数。例如,单节点 5 个备份线程可达到 100M/s。

注意

备份的影响和速度,与集群配置、部署、运行的业务都有比较大的关系,以上结论,经过多个场景的仿真测试,并且在部分合作用户场景中,得到验证,具有一定的参考意义。 但是在不同用户场景中最大影响和性能,最好以用户自己的测试结论为准。

BR 在 5.3 版本引入自动调节备份线程数的功能(默认开启),它可以帮助用户将备份期间集群总 CPU 使用率尽量维持在 80% 以下,具体介绍可以参考 备份线程自动调节。

使用 BR 备份集群相关推荐

  1. electron 使用json作为本地存储_使用腾讯云对象存储 COS 作为 Velero 后端存储,实现集群资源备份和还原...

    Velero(以前称为 Heptio Ark)是一个开源工具,可以安全地备份和还原,执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷,可以在 TKE 集群或自建 Kubenetes 集群中 ...

  2. Kubernetes 集群无损升级实践

    作者:vivo互联网服务器团队-Shu Yingya 一.背景 活跃的社区和广大的用户群,使 Kubernetes 仍然保持3个月一个版本的高频发布节奏.高频的版本发布带来了更多的新功能落地和 bug ...

  3. Linux 高可用(HA)集群之Pacemaker详解

    大纲 说明:本来我不想写这篇博文的,因为前几篇博文都有介绍pacemaker,但是我觉得还是得写一下,试想应该会有博友需要,特别是pacemaker 1.1.8(CentOS 6.4)以后,pacem ...

  4. 白话Elasticsearch72_利用HDFS备份与恢复ES生产集群的数据

    文章目录 概述 官方指导 hadoop hdfs分布式文件存储系统介绍 hdfs环境搭建 基于snapshot+hdfs进行数据备份 0.es集群数据备份的必要性 1.ES数据备份储存如何选择? 2. ...

  5. 云原生时代, Kubernetes 多集群架构初探

    为什么我们需要多集群? 近年来,多集群架构已经成为"老生常谈".我们喜欢高可用,喜欢异地多可用区,而多集群架构天生就具备了这样的能力.另一方面我们也希望通过多集群混合云来降低成本, ...

  6. mysql gtid 还是pxc_记一次 PXC 集群拆分引发的思考

    原标题:记一次 PXC 集群拆分引发的思考 作者简介 冷正磊 2018年2月加入去哪儿网 DBA 团队,主要负责机票业务的 MySQL 和 Redis 数据库的运维管理工作,以及数据库自动化运维平台部 ...

  7. 从原理到实践,手把手带你轻松get数仓双集群容灾

    摘要:本文通过介绍双集群的架构.log结构.分析步骤来介绍双集群容灾的问题分析方法. 本文分享自华为云社区<从原理到实践,手把手带你轻松get数仓双集群容灾>,原文作者:Puyol . 双 ...

  8. KunlunBase集群管理接口

    KunlunBase在0.9版本之后,增加了运维监控平台(Xpanel), 通过集群管理(Cluster_mgr)的HTTP命令接口,可以实现对整个集群环境进行管理和监控. 以下是详细的命令接口介绍: ...

  9. kubeadm搭建的K8S集群升级

    微信公众号:运维开发故事,作者: 乔克 升级说明 可用的K8S集群,使用kubeadm搭建 可以小版本升级,也可以跨一个大版本升级,不建议跨两个大版本升级 对集群资源做好备份 升级目标 将kubern ...

最新文章

  1. 自动驾驶外卖上线,美团即将配送一切
  2. CertEnroll::CX509Enrollment::p_InstallResponse:ASN1 bad tag value met. 0x8009310b
  3. golang之‘...‘的用法
  4. 摄像头poe供电原理_弱电知识之六:跟我学做监控,认识POE交换机与POE监控摄像头...
  5. [BUUCTF-pwn]——[HarekazeCTF2019]baby_rop2
  6. spring的InitializingBean介绍
  7. java 线程模型_Java基础篇之Java线程模型
  8. 问题 D: 二叉树求高度
  9. 涉及CDI和JSF的过期对话的定制错误页面
  10. vue 同步加载_2019 前端面试题汇总(主要为 Vue)
  11. 【Liunx】Linux 系统启动过程
  12. Liunx静态库和动态库
  13. 两台电脑共享怎么设置_两台电脑共用键鼠的简单设置
  14. 2018百度之星程序设计大赛 - 资格赛 P1006三原色图(MST,并查集)
  15. OPENCV Linux 显示中文 arm64
  16. OneAPIConnect(一) 欧姆龙FINS协议实现源代码
  17. JAVA日志框架与日志系统
  18. CCNP基础知识-交换技术
  19. java 图片去水印_如何用java去除图片水印?
  20. Linux centos redhat 装NVIDIA显卡驱动

热门文章

  1. Python3爬虫增加点击量(慎用)
  2. WSL-ubuntu-EZ_InSAR
  3. vue项目中 jsconfig.json是什么
  4. SQL存储过程(Stored Procedure)
  5. CentOS 7 安装 Tengine
  6. 被商业化「催熟」的B站
  7. linux 查看用户操作日志,Linux下记录所有用户的登录和操作日志
  8. 树莓派+双麦克风扩展板实现snowboy热词唤醒(避坑排雷)
  9. Android开发——手把手写APP(二)QQ退出对话框动画模拟
  10. Mysql服务器主从同步搭建