用Python自动上传备份到阿里云OSS

2025.7.18 杂七杂八 1378
33BLOG智能摘要
33blog的技术博主分享了其使用Python实现自动化备份并上传到阿里云OSS的方案及遇到的问题。相比FTP和网盘等传统方式,阿里云OSS因其价格低廉(年存储费用仅几十元)、API完善、上传下载速度快(尤其内网带宽)以及对Python支持良好,成为其首选。博主通过安装oss2 SDK,并利用阿里云控制台获取AccessKey,构建了一个具备日期命名、分片上传功能的备份脚本,以应对大文件(如2GB数据库备份)上传容易超时的问题。实际开发中,博主遇到几个关键坑点:包括选择了错误的Endpoint导致速度和流量成本问题、Bucket权限未正确配置引发403错误等。为提升脚本稳定性,其后续优化了日志记录、接入OSS生命周期管理自动删除30天前的旧备份,并通过crontab设置每日定时执行备份任务。目前该系统已稳定运行三个月,相关代码已上传GitHub,有兴趣者可留言获取。
— 此摘要由33BLOG基于AI分析文章内容生成,仅供参考。

Python + 阿里云OSS:我的自动化备份方案踩坑实录

用Python自动上传备份到阿里云OSS

大家好,我是33blog的技术博主。最近在折腾服务器数据备份的事情,发现手动备份实在太麻烦了,今天就来分享下我用Python实现自动上传备份到阿里云OSS的完整方案,包括那些让我抓狂的坑点。

为什么选择阿里云OSS?

之前试过用FTP、网盘各种方案,要么速度慢,要么不稳定。阿里云OSS有几个优势特别打动我:

  • 价格便宜(存储包一年才几十块)
  • API完善,Python支持好
  • 上传下载速度飞快(内网能跑满带宽)

准备工作:安装SDK

首先要用pip安装官方SDK(注意别装错版本):

pip install oss2
# 千万别装成oss这个包!我在这卡了半小时...

然后去阿里云控制台创建AccessKey,记得把权限只给OSS相关操作(安全第一)。

核心代码实现

下面是我的备份脚本核心部分,加了详细注释:

import oss2
from datetime import datetime

# 配置信息 - 建议放配置文件里
auth = oss2.Auth('你的AccessKeyId', '你的AccessKeySecret')
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', '你的bucket名')

def upload_to_oss(local_path):
    # 生成带日期的文件名
    date_str = datetime.now().strftime("%Y%m%d")
    remote_path = f"backups/{date_str}/{local_path.split('/')[-1]}"
    
    try:
        # 分片上传大文件(超过100MB建议用这个)
        result = oss2.resumable_upload(
            bucket, 
            remote_path,
            local_path,
            multipart_threshold=100*1024*1024
        )
        print(f"[成功] 上传 {local_path} 到 {remote_path}")
        return True
    except Exception as e:
        print(f"[失败] 上传出错: {str(e)}")
        return False

那些让我崩溃的坑

看起来简单的功能,实际开发时遇到不少问题:

  1. Endpoint问题:不同区域要换不同的地址,我一开始用的公网地址,后来发现同区域用内网地址更快(还能免流量费)
  2. 权限配置:Bucket权限没开对,报403错误查了半天
  3. 大文件上传:第一次传2GB的数据库备份直接超时,后来改用分片上传才解决

进阶优化

现在的脚本已经可以稳定运行三个月了,我还做了这些优化:

  • 添加日志记录,方便排查问题
  • 自动删除30天前的旧备份(OSS有生命周期管理功能)
  • 用crontab设置定时任务,每天凌晨自动执行

完整代码我已经放在GitHub上,需要的朋友可以留言索取。如果你也遇到过OSS相关的坑,欢迎在评论区交流心得~

评论

  • 博主写得真详细,刚好最近也在折腾OSS备份,收藏了!