【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 代表开启
相关推荐
松涛和鸣几秒前
72、IMX6ULL驱动实战:设备树(DTS/DTB)+ GPIO子系统+Platform总线
linux·服务器·arm开发·数据库·单片机
likangbinlxa18 分钟前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
r i c k1 小时前
数据库系统学习笔记
数据库·笔记·学习
野犬寒鸦1 小时前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL2 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·2 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德2 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i3 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.3 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql