在 CentOS 上使用 MinIO 备份数据的实用方案
一 方案总览
- 使用 MinIO 客户端 mc 将本地目录或数据库转储文件上传到 MinIO 存储桶,适合常规文件与数据库备份。
- 使用 mc mirror/sync 在桶与桶之间做定期或持续镜像,实现跨集群/跨地域的备份与快速回滚。
- 对运行中的 MinIO 服务数据目录 做本地快照(如 LVM 快照)或离线拷贝,用于节点级灾难恢复。
- 结合 生命周期策略 自动转低频/归档与过期删除,控制成本。MinIO 提供高可用与持久化,适合作为备份目标,但关键业务仍建议“多副本 + 异地/离线”组合。
二 准备与前提
- 在 CentOS 安装 mc(MinIO Client),并为 MinIO 服务添加别名(alias),例如:
- mc alias set minio http://<MINIO_ADDR>:9000 <ACCESS_KEY> <SECRET_KEY>
- 创建用于备份的存储桶(如 backup-2025),并为备份用途创建具备最小权限的策略(仅 PutObject/GetObject 等),然后将策略绑定到备份用的 IAM 用户/密钥。
- 备份介质与网络:确保目标磁盘/对象存储容量充足、带宽与延迟满足备份窗口,并启用 TLS 与访问控制。
三 常用备份方法
- 文件/目录备份到 MinIO
- 打包后上传(适合一次性或按日备份):
- tar czf - /var/www /etc | mc pipe minio/backup-2025/$(date +%F).tar.gz
- 直接增量拷贝(适合持续写入目录):
- mc cp -r /var/lib/mysql minio/backup-2025/mysql/
- 数据库备份到 MinIO(以 MySQL 为例)
- 逻辑备份并流式上传:
- mysqldump -uroot -ppwd --single-transaction --routines --triggers --databases your_db |
mc pipe minio/backup-2025/mysql/your_db_$(date +%F).sql.gz
- 实践要点:选择业务低峰、一致性选项(如 --single-transaction)、压缩减少网络与存储占用。
- 桶到桶镜像/同步(跨集群/跨地域备份)
- 持续镜像(源端删除后目标端也删除,适合灾备演练/快速回滚):
- mc mirror minio/source-bucket minio/backup-bucket
- 增量同步(仅新增/变更,不删目标端多余对象,适合长期留存):
- mc sync minio/source-bucket minio/backup-bucket
- 定时执行(示例:每日 02:00 增量同步):
- 0 2 * * * /usr/local/bin/mc sync minio/source-bucket minio/backup-bucket >> /var/log/mc-sync.log 2>&1
- 备份 MinIO 服务数据目录(节点级灾备)
- 方式 A(推荐):为数据盘做 LVM 快照,快照完成后再将快照内容拷贝到安全位置或另一个 MinIO 集群。
- 方式 B:停写后用 rsync 拷贝数据目录到备份盘/对象存储(停机窗口内执行)。
四 生命周期与保留策略
- 为备份桶设置 生命周期规则,自动转低频/归档与过期删除,示例(30 天后过期):
- mc ilm add minio/backup-2025 --expiry-days 30
- 可按前缀/标签设置不同规则(如:daily/ 保留 7 天、weekly/ 保留 30 天、monthly/ 保留 365 天),兼顾恢复点与成本。
五 恢复与校验
- 文件/目录恢复
- 单文件:mc cp minio/backup-2025/file.tar.gz /restore/
- 整目录:mc cp -r minio/backup-2025/mysql/ /restore/mysql/
- 数据库恢复(以 MySQL 为例)
- gunzip < your_db_2025-09-01.sql.gz | mysql -uroot -ppwd
- 桶级回滚(利用镜像)
- 误删后可将备份桶回灌到业务桶:mc mirror minio/backup-bucket minio/source-bucket
- 校验与演练
- 定期抽样恢复验证(校验 md5/sha256)、检查对象数量与大小、保留至少 1 个可回滚的还原点;将备份日志与告警接入监控系统。