1、原理
- 热备:采用物理备份方式,类似于xtrabackup。
2、适用场景和限制
-
适用场景:
- 大数据量环境。
- 需要较快的备份速度。
- 属于一致性备份
-
限制:
- 只能恢复到TIDB数据库。
- 备份过程会消耗额外的服务器资源
3、过程
- 每个TIKV节点都有一个对应的备份路径,用于执行本地备份和恢复操作。
4、使用限制
- BR恢复时,下游TICDC无法捕捉到消息。
- 备份集群和恢复集群必须采用相同的排序规则。
- 版本兼容性:可通过
-check-requirements=false
参数强制跳过版本检查。 - 某些功能的开启或关闭状态可能会导致KV发生变化。
- 需要测试BR备份所消耗的资源并进行评估。
5、查看命令
-
show backups|restores
:用于查看备份或恢复的状态。
6、具体命令
-
全量备份:
br backup full --pd <PD地址> --storage <每个TIKV节点的外部存储路径> --ratelimit 120 --log-file backupfull.log
-
全量选择性恢复:
br restore full --filter 'db*.tbl*' --pd <PD地址> --storage <备份存储路径> --log-file restorefull.log
-
增量备份:
br backup full --lastbackupts ${ts} --pd <PD地址> --storage <每个TIKV节点的外部存储路径> --log-file incremental_backup.log
(其中
${ts}
是上次备份的时间戳,可通过br validate decode --field="end version" -s <上次备份的元数据文件> | tail -n1
获取) -
单库备份/恢复:
br backup db --db <dbname> --pd <PD地址> --storage <备份存储路径> --log-file <dbname>_backup.log br restore db --db <dbname> --pd <PD地址> --storage <备份存储路径> --log-file <dbname>_restore.log
-
单表备份/恢复:
br backup table --db <dbname> --table <tablename> --pd <PD地址> --storage <备份存储路径> --log-file <tablename>_backup.log br restore table --db <dbname> --table <tablename> --pd <PD地址> --storage <备份存储路径> --log-file <tablename>_restore.log
影响备份效率的参数
- 介质存储:NAS 或 S3
-
concurrency
:根据不同集群规模调整并发数 -
compression
:"zstd" 或 "lz4" -
backup.num-threads
:4(固定值,限制备份使用的线程数)
建议
- 如果追求更小的online business影响,建议合理控制
backup.num-threads
参数与concurrency
参数。 - 如果追求更小的online business影响,建议BR备份期间关闭checksum动作,通过
--checksum=false
配置进行关闭。
BR备份脚本示例
#!/bin/bash
# 设置备份相关变量
backup_storage="xxx" # 备份存储路径
pd_addr="http://127.0.0.1:2379" # PD地址
log_file="xxx.log" # 日志文件,以时间命名
# 执行全量备份命令
br backup full \
--pd="${pd_addr}" \
--storage="${backup_storage}" \
--ratelimit=120 \
--concurrency 16 \
--compression "zstd" \
--check-sum=false \
--log-file="${log_file}"
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "Backup succeeded. Log file: ${log_file}"
else
echo "Backup failed. Please check the log file: ${log_file}"
fi
这个脚本设置了备份存储路径、PD地址和日志文件路径(以当前时间命名),并执行了全量备份命令。备份完成后,它会检查命令的退出状态来确定备份是否成功,并输出相应的消息。