课程名称:3.4 备份恢复工具 BR
学习时长:36min
课程收获:使用 BR 快速对 TiDB 集群进行备份还原
课程内容:
-
BR原理
-
限制
-
只支持TiDB >= v3.1
-
只支持在全新集群上进行恢复
-
BR备份最好按串行执行,否则不同备份任务会互相影响
- 全量备份中,不要再做增量备份
- 不要起多个全量备份任务
-
-
原理
- BR发送备份或恢复操作命令(实际上是由PD发送)到各个TiKV节点
- TiKV接到命令后,执行备份或恢复,将数据(sst文件)放在各自的备份目录
- 备份会自动过滤系统库(mysql、information_schema)
-
操作
-
由于BR恢复需要新集群能访问全量备份文件,建议备份存放在共享网络存储上
-
为了更快的备份,可以在每个TiKV节点上插入第二块盘备份,备份完再将数据迁移到总备份(可行,并不推荐)
-
备份前,需要修改GC time为大于备份时间
- 因为备份时TiKV根据事务号去查询MVCC,之后生成SST文件,若期间发生GC,备份出问题
- update mysql.tidb set variable_value = ‘30m’ where variable_name=‘tikv_gc_lefe_time’;
- 新版本这一步是自动进行,且备份完恢复原值
-
常用命令
-
备份多个表
- br backup table --db ${DB} --table order_line,order -s local:///br_data --pd ${PD_ADDR}:2379 --log-file backuo-nfs.log
-
备份多个库
- br backup db --db db1,test -s local:///br_data --pd ${PD_ADDR}:2379 --log-file backuo-nfs.log
-
全量备份
- br backup full -s local:///br_data --pd ${PD_ADDR}:2379 --log-file backuo-nfs.log
-
-
参数
- –ratelimit unit 限速
- -L, --log-level string 日志登记,默认info
- -s, --storage string 存储url
- –backupts string 不指定则使用当前时间作为事务号
- –checksum 最后是否执行checksum,默认true
-
-
-
BR(增量)备份
-
需要基于上一次全量备份,有以下限制
-
与全量备份在不同的保存路径
-
GC SafePoint必须在LastBackupTS之前
- 比如10点全量备份,11点增量备份,则10-11之间不能GC
-
-
备份命令
-
br backup full --pd ${PD_ADDR}:2379 -s local:///br_backup --lastbackupts ${LAST_BACKUP_TS}
-
解释
- 备份的是(LAST_BACKUP_TS, current PD timestamp)之间的增量数据
- LAST_BACKUP_TS=
br validate decode --field="end-version" -s local:///br_data
,也可通过备份日志获取 - 使用–lastbackupts会增量备份从该点到当前的数据
-
-
-
BR(增量)恢复
-
恢复原理
-
每个TiKV都要能访问全量备份文件
-
-
操作
-
若使用本地存储,则在恢复前,需要把全量的备份文件卡拷贝到每个TiKV节点
-
常用命令
-
指定表恢复
- br restore table …
-
指定库恢复
- br restore db …
-
指定全量恢复
- br restore full …
-
-
-
关于增量恢复
- 增量恢复和全量恢复没有什么不同
- 只有一点需要注意:增量恢复只有在last backup ts指定的全量备份恢复完后,才能进行恢复
-
-
常见问题处理
-
日志出现"key locked Error"
- 形式:log - [“backup occur kv error”][error="{"KvError":{"locked":
- BR会尝试清理lock,少量的这类errors并不会影响备份的正确性
-
日志出现:log - Error: msg:"lo(Custom { kind: AlreadyExists, error:"[5_5359_42_123_default.sst] is already exists in /dir/backup_local/" }
- 改变不了备份目录
-
恢复时,报 error : could not read local://…download sst failed
- 每个TiKV节点都要能访问全量数据文件
-
权限错误,及时使用root也不能修复
-
需要确认TikV有权限访问备份目录
- 备份,需要保证有写权限
- 恢复,需要保证有读权限
-
请记住,备份文件是由TiKV保存的
-
-
BR与Io错误相关的
- 一般是TiKV写盘时遇到的系统调用错误,检查备份目录和文件系统的挂载模式,可以尝试到切换为另一个目录或另一个盘
- 已知,备份到Samba挂载的网络磁盘,遇到过 Code:22(invalid Argument) error
-