实现MinIO数据的每日备份 1.概述MinIO是一个对象存储解决方案常作为中间件用于后端系统保存和管理文件附件附件和关系型数据库的库表数据一样是系统的核心用户数据因此系统运行过程中需要对附件数据进行每天备份。在常年累月运行中系统产生的附件量是巨大的有时单独一个附件就很大如果每天进行全量备份那备份的文件就会像滚雪球一样越来越大因此这里采用增量备份的形式每天只备份当天的数据。2.后端代码适配首先MinIO的文件层次就需要按天分开在后端调用S3接口进行上传的代码进行控制path FileUtils.generatePath(content, name); int year LocalDate.now().getYear(); int month LocalDate.now().getMonthValue(); int day LocalDate.now().getDayOfMonth(); path year/month/day/path;这样在前端调用上传接口上传附件后返回的附件路径应该是这样的{ code: 0, data: 2025/10/20/62ca4c572522f9708199a4f96e0816f879669785347483232a8fcfd085267dc5.PNG, msg: , total: null }文件在MinIO中会按照年月日分级存储3.备份Shell脚本编写以下Shell脚本调用MinIO客户端命令mc拷贝文件并定时调用脚本实现每天进行备份#!/bin/bash # MinIO 备份脚本 YEAR$(date %Y) MONTH$(date %m) DAY$(date %d) # 配置变量 MINIO_ALIASmyminio BUCKET_NAMEu******ia BACKUP_BASE_DIR/opt/backup LOG_DIR/var/log/minio_backup DATE_SUFFIX$(date %Y-%m-%d)-back BACKUP_PATH${BACKUP_BASE_DIR}/${DATE_SUFFIX} # 创建必要的目录 mkdir -p ${BACKUP_PATH} mkdir -p ${LOG_DIR} # 日志文件 LOG_FILE${LOG_DIR}/backup_$(date %Y%m%d).log # 函数记录日志 log_message() { echo $(date %Y-%m-%d %H:%M:%S) - $1 | tee -a $LOG_FILE } # 函数错误处理 error_exit() { log_message 错误: $1 exit 1 } # 开始备份 log_message 开始 MinIO 备份 log_message 备份源: ${MINIO_ALIAS}/${BUCKET_NAME} log_message 备份目标: ${BACKUP_PATH} # 检查 mc 命令是否存在 if ! command -v /opt/mc /dev/null; then error_exit mc 命令未找到请确保 MinIO Client 已安装 fi # 检查备份目录是否可写 if [ ! -w ${BACKUP_BASE_DIR} ]; then error_exit 备份目录 ${BACKUP_BASE_DIR} 不可写 fi # 执行备份 log_message 开始复制数据... /opt/mc cp ${MINIO_ALIAS}/${BUCKET_NAME}/${YEAR}/${MONTH}/${DAY} ${BACKUP_PATH}/ --recursive 21 | tee -a $LOG_FILE # 检查备份结果 if [ ${PIPESTATUS[0]} -eq 0 ]; then log_message 备份成功完成 # 显示备份统计信息 BACKUP_SIZE$(du -sh ${BACKUP_PATH} | cut -f1) FILE_COUNT$(find ${BACKUP_PATH} -type f | wc -l) log_message 备份大小: ${BACKUP_SIZE} log_message 文件数量: ${FILE_COUNT} log_message 备份位置: ${BACKUP_PATH} else error_exit 备份过程中出现错误 fi log_message 备份完成