普通视图

Received before yesterday

实现MinIO数据的每日备份

2025年10月20日 00:00

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_ALIAS="myminio"BUCKET_NAME="u******ia"BACKUP_BASE_DIR="/opt/backup"LOG_DIR="/var/log/minio_backup"DATE_SUFFIX=$(date +%Y-%m-%d)-backBACKUP_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 2>&1 | 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 "备份过程中出现错误"filog_message "=== 备份完成 ==="

MinIO

2024年8月15日 00:00

未完待续

1.概述

MinIO是一个对象存储解决方案,它基于GO语言编写,提供了与Amazon S3兼容的API,并支持部署在服务器,Docker或K8s。

2.服务端

2.1 二进制文件部署服务端

minio server 命令启动MinIO服务器. 这个路径参数/opt/miniodata确定服务器操作的文件夹。

nohup ./minio server   /opt/miniodata  \--config-dir /opt/minioconfig  \--console-address ":13399" \-address ":13487"   > minio.log &

2.2 Docker部署服务端

docker run -d \-p 3399:3399 \-p 3487:3487 \--name minio \-e "MINIO_ACCESS_KEY=12345678" \-e "MINIO_SECRET_KEY=12345678" \-v /opt/minio/data:/data \-v /opt/minio/config:/root/.minio \minio/minio server /data --console-address ":3399" -address ":3487"

3.客户端

MinIO客户端mc命令行工具提供了一个现代化的替代方案, 支持文件系统和与Amazon S3兼容的云存储服务,适用于UNIX命令如 ls 、 cat 、 cp 、 mirror 和 diff 。

客户端命令的基本格式:

mc [GLOBALFLAGS] COMMAND --help

3.1 下载

3.2 管理客户端 admin

测试连接,myminio为之前通过alias命令设置好的某个服务端的别名

[root@QNXGXUUAOAW012 opt]# ./mc admin info myminio●  127.0.0.1:13487   Uptime: 10 months    Version: 2024-07-31T05:46:26Z   Network: 1/1 OK    Drives: 1/1 OK    Pool: 1┌──────┬───────────────────────┬─────────────────────┬──────────────┐│ Pool │ Drives Usage          │ Erasure stripe size │ Erasure sets ││ 1st  │ 16.0% (total: 91 GiB) │ 1                   │ 1            │└──────┴───────────────────────┴─────────────────────┴──────────────┘773 MiB Used, 1 Bucket, 656 Objects1 drive online, 0 drives offline, EC:0

3.3 别名 alias

alias set将目标服务端http://127.0.0.1:13487设置为本地的别名myminio

[root@QNXGXUUAOAW012 opt]# ./mc alias set myminio http://127.0.0.1:13487  19j**********5UmjZW   zl0Fnit****************J8ANektAdded `myminio` successfully.[root@QNXGXUUAOAW012 opt]# 

3.4 拷贝文件 cp

递归拷贝服务端的uni******siaBucket(桶)下/2025/10/16路径下的所有文件到本地/opt/backup目录

[root@QNXGXUUAOAW012 opt]# ./mc cp myminio/uni******sia/2025/10/16 /opt/backup --recursive...e865ea0bb3c698e394b85ab3.png: 61.36 KiB / 61.36 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 4.63 MiB/s 0s[root@QNXGXUUAOAW012 opt]#
❌