写点什么

TIDB br 备份 PermissionDenied

  • 2022 年 7 月 11 日
  • 本文字数:1529 字

    阅读完需:约 5 分钟

作者: shangguan86 原文来源:https://tidb.net/blog/7963b81e

Linux 权限继承 -TiDB br 备份

TiDB 的备份工具 br 需要使用共享文件作为备份存储目录, 采用 cephFs 的方式挂载到本机的 /data/local_data/ 目录下。


br 原理图:



br 组件部署在 pd 节点上, 因为需要通过 pd 去调度 kv 往目录里有写文件。


所有节点挂载 cephfs 到 /data/local_backup 目录

备份

/data/tidb-install/tidb-toolkit/bin/br backup full --pd $pd  --storage "local:///data/local_backup/backup/$time/$cluster_name/data" --ratelimit 120 --log-file /data/local_backup/backup/$time/$cluster_name/logs/backupfull_$2-$time.log
复制代码


备份报错


[2020/09/23 01:01:02.242 +08:00] [INFO] [collector.go:172] ["Full backup Failed summary : total backup ranges: 1, total success: 0, total failed: 1"] ["backup total regions"=238348] [unitName="range start:7480000000000001035f720000000000000000 end:7480000000000001035f72ffffffffffffffff00"] [error="rpc error: code = Unknown desc = Io(Os { code: 13, kind: PermissionDenied, message: \""Permission denied\"" })"] [errorVerbose="rpc error: code = Unknown desc = Io(Os { code: 13, kind: PermissionDenied, message: \""Permission denied\"" })\"ngithub.com/pingcap/errors.AddStack\"n\"t/go/pkg/mod/github.com/pingcap/errors@v0.11.5-0.20190809092503-95897b64e011/errors.go:174\"ngithub.com/pingcap/errors.Trace\"n\"t/go/pkg/mod/github.com/pingcap/errors@v0.11.5-0.20190809092503-95897b64e011/juju_adaptor.go:15\"ngithub.com/pingcap/br/pkg/backup.SendBackup\"n\"t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/pkg/backup/client.go:792\"ngithub.com/pingcap/br/pkg/backup.(*pushDown).pushBackup.func1\"n\"t/home/jenkins/agent/workspace/build_br_multi_branch_v4.0.0/go/src/github.com/pingcap/br/pkg/backup/push.go:61\"nruntime.goexit\"n\"t/usr/local/go/src/runtime/asm_amd64.s:1357"]
复制代码


PermissionDenied 有机器对这个目录没有权限


由于早期 TiDB 帐户是手动创建的, 造成 tidb 的 pid 不一致,当需要共享一个目录的时候由于 pid 导致权限不致。

解决方案

1、修改目录为 777


结果: 不可行


TiKV 会往生成的文件不是每一台机器都可以追加数据


2、修改 tidb 帐户 pid


结果: 不可行


修改 pid 需要关闭当前使用 tidb 启动程序的进程, 停服是不可能的


3、创建备份帐户


结果: 不可行


创建一个帐户, 让所有机器这个帐户的 pid 一致, 然后更改属主属组。但 tikv 备份时用的 tidb 帐户


4、迁移集群


结果: 可行, 但代价太高了。保底方案


找出 pid 不一致的机器,扩容集群,然后下掉不致的机器,代价太高几十台机器来回折腾一遍花费时间太长了


如果目录的权限可以继承是不是就可以了呢?


setfacl


chmod 777 backupsetfacl -R -d -m u:tidb:rwx backup
复制代码


在开启备份语句试一下?


/data/tidb-install/tidb-toolkit/bin/br backup full --pd $pd  --storage "local:///data/local_backup/backup/$time/$cluster_name/data" --ratelimit 120 --log-file /data/local_backup/backup/$time/$cluster_name/logs/backupfull_$2-$time.log
复制代码


备份成功


[2020/09/23 15:25:24.076 +08:00] [INFO] [collector.go:59] ["Full backup Success summary: total backup ranges: 20, total success: 20, total failed: 0, total take(s): 84.59, total kv: 25172, total size(MB): 1.81, avg speed(MB/s): 0.02"] ["backup fast checksum"=4.391094ms] ["backup checksum"=40.133102ms] ["backup total regions"=20]
复制代码


发布于: 刚刚阅读数: 3
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TIDB br 备份 PermissionDenied_TiDB 社区干货传送门_InfoQ写作社区