MinIO 每周自动备份到本地目录:用 mc mirror 就够了
如果你的需求是“每周自动把 MinIO bucket 备份到本地目录”,推荐直接使用这个组合:
MinIO 官方 mc mirror + 系统定时任务
mc mirror 是 MinIO 官方客户端 mc 提供的同步命令,适合在 MinIO、S3 兼容对象存储和本地文件系统之间做镜像同步。它的使用方式接近 rsync,命令简单,维护成本低。
不过要注意一点:mc mirror 默认主要备份当前对象,不等于完整保留对象版本历史。如果你的 MinIO bucket 开启了 versioning,并且希望完整保留历史版本,应该进一步考虑 MinIO replication,而不是只依赖 mc mirror。
工具推荐排序
| 场景 | 推荐工具 | 说明 |
|---|---|---|
| 简单每周备份到本地 | mc mirror |
最推荐,官方工具,命令简单 |
| 需要备份到百度网盘、阿里云盘、Google Drive 等 | rclone |
支持很多云存储,也支持 S3/MinIO |
| 想做加密、去重、历史快照 | mc mirror + Kopia/restic |
先把 MinIO 拉到本地目录,再用 Kopia/restic 做版本快照 |
如果只是把 MinIO 数据每周落一份到本地磁盘,mc mirror 就够用了。
方案一:Linux、NAS 或云服务器挂本地盘备份
假设 MinIO 地址是:
http://你的服务器IP:9000
先配置 MinIO 连接:
mc alias set myminio http://你的服务器IP:9000 你的ACCESS_KEY 你的SECRET_KEY
mc alias set 的格式是:
mc alias set ALIAS URL ACCESSKEY SECRETKEY
测试是否能正常连接:
mc ls myminio
创建备份脚本:
mkdir -p /opt/scripts
nano /opt/scripts/minio-weekly-backup.sh
写入下面内容:
#!/bin/bash
set -e
BACKUP_ROOT="/data/minio-backup"
TODAY=$(date +%F)
LOG_DIR="/var/log/minio-backup"
LOG_FILE="$LOG_DIR/backup-$TODAY.log"
mkdir -p "$BACKUP_ROOT/$TODAY"
mkdir -p "$LOG_DIR"
echo "===== MinIO backup start: $(date) =====" >> "$LOG_FILE"
# 备份所有 bucket
mc ls myminio | awk '{print $NF}' | sed 's#/$##' | while read bucket
do
echo "Backing up bucket: $bucket" >> "$LOG_FILE"
mc mirror --overwrite "myminio/$bucket" "$BACKUP_ROOT/$TODAY/$bucket" >> "$LOG_FILE" 2>&1
done
# 只保留最近 8 周备份
find "$BACKUP_ROOT" -mindepth 1 -maxdepth 1 -type d -mtime +56 -exec rm -rf {} \;
echo "===== MinIO backup end: $(date) =====" >> "$LOG_FILE"
授权脚本可执行:
chmod +x /opt/scripts/minio-weekly-backup.sh
设置每周日凌晨 3 点自动执行:
crontab -e
加入:
0 3 * * 0 /opt/scripts/minio-weekly-backup.sh
这样就会生成类似下面的目录结构:
/data/minio-backup/
2026-06-30/
bucket1/
bucket2/
2026-07-07/
bucket1/
bucket2/
每周一个日期目录的好处是,即使 MinIO 里误删了文件,也能从之前日期的备份目录里找回。
方案二:Windows 本地电脑每周自动备份
如果你想把 MinIO 备份到 Windows 的 D:\minio-backup,可以使用 Windows 任务计划程序。
先下载 mc.exe,放到:
C:\tools\mc.exe
配置连接:
C:\tools\mc.exe alias set myminio http://你的服务器IP:9000 你的ACCESS_KEY 你的SECRET_KEY
测试连接:
C:\tools\mc.exe ls myminio
创建脚本:
C:\scripts\minio-weekly-backup.bat
内容如下:
@echo off
set MC=C:\tools\mc.exe
set BACKUP_ROOT=D:\minio-backup
set LOG=%BACKUP_ROOT%\backup.log
for /f "tokens=2 delims==" %%i in ('wmic os get LocalDateTime /value ^| find "="') do set dt=%%i
set TODAY=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%
if not exist "%BACKUP_ROOT%\%TODAY%" mkdir "%BACKUP_ROOT%\%TODAY%"
echo ===== MinIO backup start: %date% %time% ===== >> "%LOG%"
REM 示例:备份 bucket1,改成你的 bucket 名
%MC% mirror --overwrite myminio/bucket1 "%BACKUP_ROOT%\%TODAY%\bucket1" >> "%LOG%" 2>&1
echo ===== MinIO backup end: %date% %time% ===== >> "%LOG%"
设置每周日凌晨 3 点自动执行:
schtasks /Create /TN "MinIO Weekly Backup" /TR "C:\scripts\minio-weekly-backup.bat" /SC WEEKLY /D SUN /ST 03:00
Windows 下也建议使用日期目录:
D:\minio-backup\
2026-06-30\
bucket1\
bucket2\
2026-07-07\
bucket1\
bucket2\
重要提醒:不要乱用 --remove
mc mirror --remove 会删除目标目录里“源 MinIO 没有的文件”,也就是让本地目录和 MinIO 完全一致。
所以:
mc mirror --overwrite myminio/bucket /backup/bucket
更适合做备份。
而这个命令:
mc mirror --overwrite --remove myminio/bucket /backup/bucket
更像同步镜像。如果 MinIO 里误删了文件,本地目标目录也可能跟着删。除非你明确需要“目标和源完全一致”,否则不建议把 --remove 用在唯一备份任务里。
--overwrite 的作用是覆盖目标已有对象,适合同步更新过的对象。
除了 bucket 文件,还应该备份什么
只备份对象文件还不够。实际恢复时,通常还需要这些信息:
docker-compose.yml
.env
MinIO 账号密码
bucket 名称
bucket policy
应用程序里用到的 access key
如果是正式系统,还可以使用:
mc admin cluster bucket export
这个命令可以导出指定 bucket 或全部 bucket 的元数据,输出为 cluster-metadata.zip。这类元数据在迁移或恢复环境时很有用。
总结
普通 MinIO 本地备份,建议直接用:
mc mirror + cron / schtasks
推荐目录结构是“每周一个日期目录”,例如:
/data/minio-backup/2026-06-30/
/data/minio-backup/2026-07-07/
这样比单纯覆盖同一个目录更安全。误删文件、误覆盖对象时,至少还能回到之前某一周的备份里找数据。
参考: