使用 MinIO Client (mc) 将自建 MinIO 数据备份至阿里云 OSS

在公司内部架构中,我们通常会将重要文件部署在自建的 MinIO 对象存储服务中。然而,为了防止本地数据丢失或灾难性故障,将数据异地备份到公有云存储(如阿里云 OSS)是一个至关重要的环节。

本文将介绍如何使用 MinIO 官方命令行工具 mc (MinIO Client),实现从 Kubernetes 集群内自建 MinIO 到阿里云 OSS 的全量及增量自动备份。

1. 前置准备:获取阿里云 OSS 访问权限

在使用 mc 之前,我们需要在阿里云侧创建一个专用的 RAM 用户并授予相应的权限策略。

创建用户

登录阿里云控制台,进入 访问控制 (RAM) ,创建一个新的用户,命名为 ossuser。

注意:创建时需勾选"OpenAPI 调用访问"以获取 AccessKey ID 和 AccessKey Secret。

创建完用户后记录下生成的 AccessKey 和 Secret Key,接下来的步骤将用到这个凭据。

配置权限策略

为了赋予该用户操作 OSS 的基本读写能力,我们需要绑定一个自定义权限策略。以下是推荐的策略模板(请根据实际情况修改 Resource 中的 bucketName):

json 复制代码
{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "oss:ListObjects",
      "Resource": "acs:oss:*:*:bucketName"
    },
    {
      "Effect": "Allow",
      "Action": "oss:GetBucketInfo",
      "Resource": "acs:oss:*:*:bucketName"
    },
    {
      "Effect": "Allow",
      "Action": "oss:*",
      "Resource": "acs:oss:*:*:bucketName/*"
    }
  ]
}

完成上述步骤后,将该权限赋予上一步创建的用户。用户ossuser 就有了读写OSS桶bucketName的权限了。

2. 环境配置:设置 mc 别称 (Aliases)

mc 工具通过别名(Aliases)来管理不同的对象存储服务。我们需要分别配置连接阿里云 OSS 和本地 MinIO 的别名。

假设我们在拥有 MinIO 服务的节点上执行以下命令:

配置阿里云 OSS 别名

这里我将阿里云端定义为 oss-storage(示例命名,也可按需修改):

bash 复制代码
# 语法: mc alias set <ALIAS_NAME> <URL> <ACCESS_KEY> <SECRET_KEY>
mc alias set oss-storage \
  https://oss-cn-shenzhen.aliyuncs.com \
  <你的阿里云AccessKey> \
  <你的阿里云SecretKey>
配置本地 MinIO 别名

连接部署在 K8s 集群内的 MinIO Service:

bash 复制代码
# 配置 mc 连接 k8s 中的 Minio
mc alias set local-minio \
  http://<minio-service-ip>:9000 \
  <Minio_AccessKey> \
  <Minio_SecretKey>

此时,我们可以通过 mc admin info 命令检查连通性:

bash 复制代码
mc admin info local-minio

别名oss-storage不能使用上面命令,可以使用下面命令测试,

bash 复制代码
mc ls  oss-storage/bucketName/

3. 开始备份:使用 mirror 命令

配置好两个 Storage Alias 后,就可以进行数据同步了。我们主要使用 mc mirror 命令来实现数据的镜像传输。

场景一:首次全量备份

第一次备份时,建议加上 --overwrite 和 --preserve 参数。

  • --overwrite:覆盖目标端已有的同名文件。
  • --preserve:保留文件的元数据(如时间戳等)。

命令如下:

bash 复制代码
# mc mirror --overwrite --preserve <源端> <目标端>
mc mirror --overwrite --preserve \
  local-minio/bucketName/ \
  oss-storage/bucketName/

(注:如果是跨账号或不同域名的对象存储,建议源端桶和目标端桶名称保持一致以便于管理)

场景二:后续增量备份

在全量备份完成后,后续的备份只需关注差异数据。

命令如下:

bash 复制代码
# 仅同步变化的文件,速度极快
mc mirror --overwrite \
  local-minio/bucketName/ \
  oss-storage/bucketName/

4. 自动化建议 (可选)

为了实现无人值守的备份,可以将上述增量备份命令添加到一个 Shell 脚本中,并通过 Linux 的 crontab 定时任务来触发。例如,每天早上凌晨 3 点执行一次全量备份,其余时间执行增量备份。


希望这篇教程能帮助各位开发者构建更健壮的数据灾备体系!如有任何疑问,欢迎评论区交流。

相关推荐
隔窗听雨眠12 小时前
KingbaseES平替全链路实践:从迁移评估到可持续运维
运维
skywalk816312 小时前
登到192.168.1.5那台机器,看看今天白天,大约从早晨到晚上,都卡住了。看看因为什么卡住,为什么卡住而没有杀死那个导致卡死的进程,为什么
运维·系统·freebsd
运维行者_12 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php
晚风吹北巷14 小时前
Linux复习篇(自用)
linux·运维·服务器·1024程序员节
风哥2号14 小时前
数据库教程FGMT69:PostgreSQL运维诊断与监控分析
运维·数据库·postgresql
Harrison Ben15 小时前
(原创)SAP FI自动入账奥义:FBKP FBKA FBKF
运维·sap·sap fico·sap运维·sap 实施
无足鸟ICT15 小时前
【RHCA+】reboot命令(重启)
linux·运维·服务器·1024程序员节
DYWorker00116 小时前
第1课:基于正点原子RK3568开发板读懂Linux内核
linux·运维·网络
GlobalInfo16 小时前
全球及中国机器人现场部署服务行业研究报告(2026版):市场现状、行业前景与占有率分析
大数据·运维·人工智能
Android系统攻城狮16 小时前
Linux FFmpeg深度解析之avformat_open_input调用流程与实战(一)
linux·运维·ffmpeg·车载音视频·ffmpeg音视频·音视频进阶手册