使用 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 点执行一次全量备份,其余时间执行增量备份。


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

相关推荐
布裘几秒前
【银河麒麟】桌面系统循环登录,无法进入桌面?
linux·运维·服务器
慧都小项3 分钟前
程序到了Linux才出错?用CLion把调试接到目标环境
linux·运维·服务器
Lsetea34 分钟前
OpenSSL verify报unhandled critical extension:error 34与关键扩展排查
运维·https·ssl证书·openssl·证书链
guo_wen_qiang1 小时前
docker的备份与迁移
运维·docker·容器
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(一):物理内存初始化 — memblock 怎么把内存交给 buddy
linux·运维·服务器
Android系统攻城狮3 小时前
Linux Gstreamer深度解析之gst_audio_encoder_get_frame_max调用流程与实战(五十九)
linux·运维·服务器·gstreamer音视频·音视频进阶·gstreamer音视频进阶
忆挽篱笙歌4 小时前
makefil
linux·运维·服务器
程序员老赵5 小时前
Docker 部署 Dolibarr:轻松搭建开源 ERP/CRM 平台
运维·前端·后端
cws2004015 小时前
监控摄像头选型指南
运维·网络·监控
协皓家具5 小时前
2026年广州岛台吧台椅厂家有啥新变化
大数据·运维·python·devops