【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(默认为 defaultwrite)****
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、全量备份恢复

备份

shell 复制代码
# 创建备份路径
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';	

先进行全量备份

shell 复制代码
# 创建备份路径
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 代表开启
相关推荐
我自飞扬临天下10 分钟前
Mybatis-Plus快速入门
数据库·mybatis-plus
Marzlam12 分钟前
sql server索引优化语句
开发语言·数据库
Zmxcl-0071 小时前
IIS解析漏洞
服务器·数据库·microsoft
明矾java1 小时前
Mysql-SQL执行流程解析
数据库·sql·mysql
蓬莱道人2 小时前
BenchmarkSQL使用教程
数据库
p@nd@2 小时前
Oracle筑基篇-调度算法-LRU的引入
数据库·oracle·操作系统·lru
来一杯龙舌兰2 小时前
【MongoDB】使用 MongoDB 存储日志、审批、MQ等数据的案例及优点
数据库·mongodb
技术路上的苦行僧2 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb
孤独的履行者2 小时前
入门靶机:DC-1的渗透测试
数据库·python·网络安全
wy02_2 小时前
MySQL-MVCC(多版本并发控制)
数据库·mysql