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
那些让我崩溃的坑
看起来简单的功能,实际开发时遇到不少问题:
- Endpoint问题:不同区域要换不同的地址,我一开始用的公网地址,后来发现同区域用内网地址更快(还能免流量费)
- 权限配置:Bucket权限没开对,报403错误查了半天
- 大文件上传:第一次传2GB的数据库备份直接超时,后来改用分片上传才解决
进阶优化
现在的脚本已经可以稳定运行三个月了,我还做了这些优化:
- 添加日志记录,方便排查问题
- 自动删除30天前的旧备份(OSS有生命周期管理功能)
- 用crontab设置定时任务,每天凌晨自动执行
完整代码我已经放在GitHub上,需要的朋友可以留言索取。如果你也遇到过OSS相关的坑,欢迎在评论区交流心得~
博主写得真详细,刚好最近也在折腾OSS备份,收藏了!