当前位置: 首页 > news >正文

使用 BR 备份 TiDB 到阿里云 OSS 存储

目录

  • 前言
  • 阿里云 OSS
  • 日志备份
  • 快照备份
  • 写在最后

前言

最近好久没更新 Oracle 相关内容了,都在搞备份的东西,为啥呢?

因为最近 Oracle 相关的内容都是很基础的,也没有遇到什么问题,所以就自然没什么内容可写了,反倒是最近几天都在研究 TiDB 备份,顺便学习了下 TiDB 的体系结构以及各种组件,也是比较有收获的。

话说回来,书接上篇 使用 BR 备份 TiDB 到 AWS S3 存储 备份到 AWS S3,部署完之后发现快照备份执行到一半还是会失败,分析后说原因可能是 AWS 公网络延迟导致的,到最后也没解决。

所以又换了阿里云 OSS 测了一下,今天也记录一下测试过程中遇到的一些问题,虽说最后也没成功。

阿里云 OSS

在阿里云上创建 OSS 存储部分不是我操作的,所以没有记录,我这边是直接获取到了 OSS 存储的 BucketAK/SK 信息以及 Endpoint,有这些信息就可以了。

为了验证是否可以正常连接阿里云 OSS 存储,可以下载 oss-browser 或者 S3 Browser,输入上面获取到的信息就可以连接到阿里云 OSS 存储:

如果使用 S3 Browser 记得要选择 Virtual hosted style

阿里云 OSS 不支持 Path style,会报错:

连接后可以看到创建好的 OSS 存储以及里面的内容,测试可以正常上传文件:

至此,阿里云 OSS 存储验证正常。

日志备份

日志备份是一个 task,所以只需要启动一次即可:

[root@tidb ~]# cat<<-EOF>/root/scripts/brbackuplog.sh
AccessKey="根据实际情况填写"
SecretKey="根据实际情况填写"
Bucket="根据实际情况填写"
Endpoint="根据实际情况填写"
PDIP="根据实际情况填写"
export AWS_ACCESS_KEY_ID=$AccessKey
export AWS_SECRET_ACCESS_KEY=$SecretKey
CURDATE=$(date +%Y%m%d%H%M%S)
br log start --task-name=pitr \
--pd "${PDIP}" \
--storage "s3://${Bucket}/backup-data/log-backup" \
--s3.endpoint="https://${Endpoint}" \
--s3.provider="alibaba" \
--log-file brbackuplog-$CURDATE.logecho s3://${Bucket}/backup-data/log-backup
EOF

启动日志备份任务:

[root@tidb ~]# chmod +x /root/scripts/brbackuplog.sh
[root@tidb ~]# sh /root/scripts/brbackuplog.sh

很不幸,执行报错了:

Error: Alibaba RAM Provider Retrieve: Get "http://100.100.100.200/latest/meta-data/ram/security-credentials/": dial tcp 100.100.100.200:80: i/o timeout

这个问题分析了很久,后来在 TiDB 社区上搜到了这个问题,是个 BUG,可以参考以下问答:

https://asktug.com/t/topic/1029983

是因为在 provider 是 alibaba 的情况下,没有使用到环境变量中 AK/SK 的问题导致的这个报错,但是在 BR v7.5.3 版本已经进行修复:

所以只需要将 BR 升级到 v7.5.3 以上版本即可避免这个问题,我这里选择小版本用最新的 v7.5.7 版本:

[root@tidb ~]# wget https://tiup-mirrors.pingcap.com/br-v7.5.7-linux-amd64.tar.gz
[root@tidb ~]# tar -xf br-v7.5.7-linux-amd64.tar.gz -C /usr/sbin/
[root@tidb ~]# br --version
Release Version: v7.5.7

这里提一嘴:因为我 TiDB 集群 v7.5.0 版本的限制,所以选择了跟 TiDB 集群版本相同的 BR 版本,其实这是个思维误区,其实应该选择小版本最新,避免这些已经被修复的 BUG。

这个问题解决了,重新执行日志备份任务,又报错了:

Error: RequestError: send request failed
caused by: Head "https://*******.oss-cn-shanghai.aliyuncs.com/backup-data/log-backup/backup.lock": read tcp xxxxx:38072->106.14.228.174:443: read: connection reset by peer

这个看起来还是网络问题,但是 telnet 端口又是通的:

[root@tidb ~]# telnet 106.14.228.174 443
Trying 106.14.228.174...
Connected to 106.14.228.174.
Escape character is '^]'.

后来在 TiDB 社区提了个问题,跟社区朋友们讨论了一下,有了一些头绪,怀疑不是 BR 工具本身的问题,有可能是 这台 Linux 主机本身就不能访问 OSS,使用 ossutil64 测了一下能不能直接连接 OSS 存储:

[root@tidb ~]# ossutil64 ls oss://csi-tidb-backup/
Error: Get http://csi-tidb-backup.oss-cn-shanghai.aliyuncs.com/?delimiter&encoding-type=url&marker&max-keys=1000&prefix: read tcp 10.207.38.40:37130->106.14.228.174:80: read: connection reset by peer, Bucket=csi-tidb-backup, Object=

可以看到跟上面的报错一致,网络也通,端口也通,为什么不能访问?咨询了一下阿里云那边,检查了 OSS 那边的日志,发现有一个报错:

提示没有权限,后来发现是因为阿里云 RAM 的用户没有 OSS 权限,赋予权限之后,这个权限问题不会出现了,但是还是无法正常备份,依然报错:

[root@tidb ~]# ossutil64 ls oss://csi-tidb-backup/
Error: Get http://csi-tidb-backup.oss-cn-shanghai.aliyuncs.com/?delimiter&encoding-type=url&marker&max-keys=1000&prefix: read tcp 10.207.38.40:37130->106.14.228.174:80: read: connection reset by peer, Bucket=csi-tidb-backup, Object=

后面又怀疑可能是这台主机有网络限制的原因,我在本地 Windows 测试了一下 ossutil,发现可以正常连接:

E:\ossutil>ossutil64 ls oss://csi-tidb-backup/
LastModifiedTime                   Size(B)  StorageClass   ETAG                                  ObjectName
2025-11-05 13:22:53 +0800 CST            0      Standard   D41D8CD98F00B204E9800998ECF8427E      oss://csi-tidb-backup/backup-data/
2025-11-05 13:23:06 +0800 CST            0      Standard   D41D8CD98F00B204E9800998ECF8427E      oss://csi-tidb-backup/backup-data/log-backup/
Object Number is: 20.822179(s) elapsed

这么看起来真可能是网络限制问题,咨询了一下网络组同事,看了一下拦截日志,发现有一个 IP 被拦截了,我看了下这个 IP [106.14.228.174],发现很眼熟,ping 了一下:

[root@tidb ~]# ping csi-tidb-backup.oss-cn-shanghai.aliyuncs.com
PING csi-tidb-backup.oss-cn-shanghai.aliyuncs.com (106.14.228.174) 56(84) bytes of data.
^C

原来是 bucket 的域名没有放行,再返回去看,其实一开始报错就很明确的展示了,只是我选择性的忽略了,因为之前已经请网络组放行了 oss-cn-shanghai.aliyuncs.com 域名,默认就觉得网络这块已经没问题了,所以就不往那方面去考虑,但其实原因早就告诉我们了:read tcp 10.207.38.40:37130->106.14.228.174:80

请网络组同事放行 csi-tidb-backup.oss-cn-shanghai.aliyuncs.com 域名之后,再次执行日志备份:

[root@tidb scripts]# sh brbackuplogaliyun.sh 
Detail BR log in brbackuplog-20251107150320.log 
[2025/11/07 15:03:21.642 +08:00] [INFO] [collector.go:77] ["log start"] [streamTaskInfo="{taskName=pitr,startTs=462028537971605515,endTS=999999999999999999,tableFilter=*.*}"] [pausing=false] [rangeCount=2]
[2025/11/07 15:03:21.643 +08:00] [INFO] [collector.go:77] ["log start success summary"] [total-ranges=0] [ranges-succeed=0] [ranges-failed=0] [backup-checksum=306.222299ms] [total-take=1.274043205s]## 查看备份任务
[root@tidb ~]# br log status --pd "10.207.38.42:2379"
Detail BR log in /tmp/br.log.2025-11-07T15.43.55+0800 
● Total 1 Tasks.
> #1 <name: pitrstatus: ● NORMALstart: 2025-11-07 15:03:20.441 +0800end: 2090-11-18 22:07:45.624 +0800storage: s3://csi-tidb-backup/backup-data/log-backupspeed(est.): 778.46 ops/s
checkpoint[global]: 2025-11-07 15:41:43.091 +0800; gap=2m14s

日志备份成功。

快照备份

执行快照备份:

[root@YCPTLMESTIDB01 scripts]# sh brbackupfullaliyun.sh 
Detail BR log in brbackupfull-20251107150353.log 
Full Backup <---------------------------------------------------------------------------------------> 5.81%

等待备份完成,阿里云 OSS 备份部署完成。

写在最后

最后,一首打油诗奉上:

版本对齐是个坑,升级工具才能通。权限一层又一层,RAM、OSS、防火墙。
网络安全诚可贵,拦截规则价更高。域名放行以为够,Bucket域名又被搞。
报错信息明明白,先入为主看不到。ping通telnet全都行,就是连不上云端。
本地测试一切好,服务器上就报错。排查三天头发掉,原来墙里有玄机。
安全重要人人知,层层设防理应该。可怜运维两行泪,复杂规则绕晕人。
OSS、S3 和 RAM,AK、SK 加 Endpoint。Virtual、Path 两种style,选错一个全白忙。
社区论坛翻个遍,日志文件看到瞎。最后发现真凶手,一条规则把路卡。
安全诚可贵,效率价更高;若为复杂死,两者皆可抛。

吐槽归吐槽,该配的安全还得配。只是希望规则能更透明些,文档能更清晰些,让我们少掉点头发吧!😭

http://www.dtcms.com/a/600608.html

相关文章:

  • 机器学习项目——基于集成学习提升树情绪分类(代码/论文)
  • C++ 抽象类与多态原理深度解析:从纯虚函数到虚表机制(附高频面试题)
  • 尚硅谷 SpringCloud 01 分布式概念-工程创建-nacos安装-nacos服务注册与发现 -远程调用
  • C# Sqlite帮助类
  • 传统方式部署 Hadoop 高可用集群
  • 微软 Win11 经典版 Outlook 曝 BUG,加速 SSD 损耗
  • C++在边缘AI加速中的硬件优化:结合位运算与SIMD提升推理效率
  • 网站开发文档撰写作业牡丹江整站优化
  • QT:ItemView视图控件
  • 让UI完全按屏幕比例变化的方法
  • 结项报告完整版:Apache SeaTunnel 支持 Flink 引擎 Schema Evolution 功能
  • 微服务生态组件之Spring Cloud LoadBalancer详解和源码分析
  • 重庆长寿网站设计公司哪家专业网站跳转微信链接
  • 阿里云域名DNS解析URL转发不支持HTTPS?
  • leetcode 2654. 使数组所有元素变成 1 的最少操作次数 中等
  • AI取名大师 | PM2 部署 Bun.js 应用及配置 Let‘s Encrypt 免费 HTTPS 证书
  • 结项报告完整版 | Apache SeaTunnel支持metalake开发
  • 【cursor】进阶技巧Rules
  • WebServer05
  • 【数据分析-Excel】常用函数汇总
  • 深入理解MySQL事务隔离级别与锁机制(从ACID到MVCC的全面解析)
  • RabbitMQ应用(1)
  • .NET驾驭Excel之力:Excel应用程序的创建与管理
  • Unity2.5D视角肉鸽项目架构
  • JAVA和C#的语法对比
  • WPS Excel 图表
  • 电商网站开发需要掌握哪些知识技能品牌设计和vi设计有什么区别
  • Spring 框架整合 JUnit 单元测试——包含完整执行流程
  • .NET驾驭Excel之力:自动化数据处理 - 开篇概述与环境准备
  • 多站点网站群的建设与管理识图搜索在线 照片识别