【TiDB原理与实战详解】5、BR 物理备份恢复与Binlog 数据同步~学不会? 不存在的!
BR 物理备份恢复
BR 全称为 Backup & Restore,是 TiDB 分布式备份恢复的命令行工具,用于对 TiDB 集群进行数据备份和恢复。
相比 dumpling
,BR 更适合大数据量的场景。
BR 除了可以用来进行常规备份恢复外,也可以在保证兼容性前提下用来做大规模的数据迁移。
本文介绍了 BR 的工作原理、推荐部署配置、使用限制以及几种使用方式。
1、工作原理
BR 将备份或恢复操作命令下发到各个 TiKV 节点。TiKV 收到命令后执行相应的备份或恢复操作。
在一次备份或恢复中,各个 TiKV 节点都会有一个对应的备份路径,TiKV 备份时产生的备份文件将会保存在该路径下,恢复时也会从该路径读取相应的备份文件。
2、备份文件类型
备份路径下会生成以下两种类型文件:
- SST 文件:存储 TiKV 备份下来的数据信息
backupmeta
文件:存储本次备份的元信息,包括备份文件数、备份文件的 Key 区间、备份文件大小和备份文件 Hash (sha256) 值backup.lock
文件:用于防止多次备份到同一目录
SST 文件命名格式
SST 文件以 storeID_regionID_regionEpoch_keyHash_cf
的格式命名。格式名的解释如下:
- storeID:TiKV 节点编号
- regionID:Region 编号
- regionEpoch:Region 版本号
- keyHash:Range startKey 的 Hash (sha256) 值,确保唯一性
- cf:RocksDB 的 ColumnFamily(默认为
default
或write
)****
3、部署BR工具
推荐部署配置
将BR工具部署在PD节点,然后在tikv节点挂载远程目录,使用万兆网卡,减少带宽瓶颈。
恢复数据时需要关闭TiCDC同步。
使用BR 5.3.0以上版本
备份和恢复 mysql
系统库下的表数据(实验特性)
备份系统表但是不能完全恢复到系统表中
BR最低配置
CPU | 内存 | 硬盘类型 | 网络 |
---|---|---|---|
1 核 | 4 GB | HDD | 千兆网卡 |
一般场景下(备份恢复的表少于 1000 张),BR 在运行期间的 CPU 消耗不会超过 200%,内存消耗不会超过 4 GB。但在备份和恢复大量数据表时,BR 的内存消耗可能会上升到 4 GB 以上。在实际测试中,备份 24000 张表大概需要消耗 2.7 GB 内存,CPU 消耗维持在 100% 以下。
pd节点 下载BR工具
wget https://download.pingcap.org/tidb-toolkit-v5.3.0-linux-amd64.tar.gz
tar xf tidb-toolkit-v5.3.0-linux-amd64.tar.gz
cd /root/tidb-toolkit-v5.3.0-linux-amd64/bin
命令和子命令
BR 由多层命令组成。目前,BR 包含 `backup`、`restore` 和 `version` 三个子命令:
br backup 用于备份 TiDB 集群
br restore 用于恢复 TiDB 集群
以上三个子命令可能还包含这些子命令:
full: 可用于备份或恢复全部数据。
db: 可用于备份或恢复集群中的指定数据库。
table:可用于备份或恢复集群指定数据库中的单张表。
常用选项
--pd: 用于连接的选项,表示 PD 服务地址,例如 "${PDIP}:2379"。
-h/--help: 获取所有命令和子命令的使用帮助。例如 br backup --help。
-V(或 --version): 检查 BR 版本。
--ca: 指定 PEM 格式的受信任 CA 的证书文件路径。
--cert:指定 PEM 格式的 SSL 证书文件路径。
--key: 指定 PEM 格式的 SSL 证书密钥文件路径。
--status-addr:BR 向 Prometheus 提供统计数据的监听地址。
--ratelimit:线程数,越大速度越快,但是对生产环境影响越大。
4、全量备份恢复
备份
# 创建备份路径
mkdir -p /data01/backup/
# 授权备份路径
chown -R tidb:tidb /data01/backup
# 开始备份
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br backup full \
--pd "10.10.8.107:2379" \
--storage "local:///data01/backup" \
--ratelimit 128 \ # 线程数
--log-file backupfull.log
恢复
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore full \
--pd "10.10.8.107:2379" \
--storage "local:///data01/backup" \
--ratelimit 128 \
--log-file restorefull.log
5、单库备份恢复
备份
# 创建备份路径
mkdir -p /data01/backup/a
# 授权备份路径
chown -R tidb:tidb /data01/backup/a
# 开始备份
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br backup db \
--pd "10.10.8.107:2379" \
--db a \
--storage "local:///data01/backup/a" \
--ratelimit 128 \
--log-file backuptable.log
恢复
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore db \
--pd "10.10.8.107:2379" \
--db "a" \
--ratelimit 128 \
--storage "local:///data01/backup/a" \
--log-file restorefull.log
6、单表备份恢复
备份
# 创建备份路径
mkdir -p /data01/backup/a/t1
# 授权备份路径
chown -R tidb:tidb /data01/backup/a/t1
# 开始备份
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br backup table \
--pd "10.10.8.107:2379" \
--db a \
--table t1 \
--storage "local:///data01/backup/a/t1" \
--ratelimit 128 \
--log-file backuptable.log
恢复
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore table \
--pd "10.10.8.107:2379" \
--db "a" \
--table "t1" \
--ratelimit 128 \
--storage "local:///data01/backup/a/t1" \
--log-file restorefull.log
7、过滤备份恢复
正则过滤库表恢复
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore full \
--pd "10.10.8.107:2379" \
--filter 'a*.t*' \
--storage "local:///data01/backup/a" \
--log-file restorefull.log
指定过滤库表恢复 --filter指定多个表
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore full \
--pd "10.10.8.107:2379" \
--filter 'a.t1' \
--filter 'a.t2' \
--storage "local:///data01/backup/a" \
--log-file restorefull.log
8、增量备份恢复
可以进行做一个全量备份,多个增量备份。
如果需要多次增量备份需要调整tikv_gc_life_time
参数,调整后需要先进行全备在进行增备,因为在你修改参数之前tikv可能已经GC过了,这会清理掉之前的数据版本信息,导致备份失败
修改tikv_gc_life_time
参数默认时间(当你将tikv_gc_life_time
参数修改为24小时后,如果你超过24小时没有进行增量备份将需要重新进行全量备份)
UPDATE mysql.tidb SET VARIABLE_VALUE = '24h' WHERE VARIABLE_NAME = 'tikv_gc_life_time';
先进行全量备份
# 创建备份路径
mkdir -p /data01/backup/all
# 授权备份路径
chown -R tidb:tidb /data01/backup/all
# 开始备份
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br backup full \
--pd "10.10.8.107:2379" \
--storage "local:///data01/backup/all" \
--ratelimit 128 \
--log-file backupfull.log
获取时间戳
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br validate decode --field="end-version" -s "local:///data01/backup/all" | tail -n1
Detail BR log in /tmp/br.log.2022-02-14T12.03.02+0800
431177486559608836 # 就是这个
指定时间戳进行增量备份
# 创建备份路径
mkdir -p /data01/backup/inc0
# 授权备份路径
chown -R tidb:tidb /data01/backup/inc0
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br backup full\
--pd 10.10.8.107:2379 \
--ratelimit 128 \
-s "local:///data01/backup/inc0" \
--lastbackupts 431177486559608836
必须按照备份的顺序进行增量的恢复
先指定全量备份路径进行恢复
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore full \
--pd "10.10.8.107:2379" \
--storage "local:///data01/backup/all" \
--ratelimit 128 \
--log-file restorefull.log
在指定增量备份路径进行恢复
/root/tidb-toolkit-v5.3.0-linux-amd64/bin/br restore full \
--pd "10.10.8.107:2379" \
--storage "local:///data01/backup/inc0" \
--ratelimit 128 \
--log-file restorefull.log
TiDB Binlog 数据同步工具
TiDB Binlog 是一个用于收集 TiDB 的 binlog,并提供准实时备份和同步功能的商业工具。
- 数据同步:同步 TiDB 集群数据到其他数据库
- 实时备份和恢复:备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复
1、tiup安装binlogctl工具
tiup ctl:v5.2.0 binlog
2、配置
查看是否开启binlog
show variables like "log_bin";# 0 代表关闭,1 代表开启
开启binlog
# 编辑配置文件
tiup cluster edit-config test
# server_configs标签添加如下内容
server_configs:
tidb:
log.slow-threshold: 300
binlog.enable: true
binlog.ignore-error: true
重载配置
# 查看集群节点信息
tiup cluster display test
# 重载tidb节点
tiup cluster reload test -N 10.10.8.107:4000
查看是否开启binlog
show variables like "log_bin";# 0 代表关闭,1 代表开启