使用 mc (MiniIO Client) 命令行工具
# 配置源和目标MiniIO
mc config host add source http://source-minio:9000 <ACCESS_KEY> <SECRET_KEY>
mc config host add target http://target-minio:9000 <ACCESS_KEY> <SECRET_KEY>
# 迁移数据
mc cp --recursive source/bucket target/bucket
使用rclone工具
# 配置rclone.conf
[source]
type = s3
provider = Minio
access_key_id = <ACCESS_KEY>
secret_access_key = <SECRET_KEY>
endpoint = http://source-minio:9000
[target]
type = s3
provider = Minio
access_key_id = <ACCESS_KEY>
secret_access_key = <SECRET_KEY>
endpoint = http://target-minio:9000
# 执行同步
rclone sync source:bucket target:bucket
使用AWS CLI
bashCopyaws s3 sync \
--endpoint-url http://source-minio:9000 \
s3://source-bucket \
s3://target-bucket \
--endpoint-url http://target-minio:9000
安装方法
AWS CLI
使用 apt 安装(简单但可能不是最新版本):
bashCopysudo apt update
sudo apt install awscli
rclone
sudo apt update
sudo apt install rclone
工具对比
MinIO 数据迁移工具对比
特性 | rclone | AWS CLI | mc (MinIO Client) |
---|---|---|---|
安装复杂度 | 中等 | 简单 | 简单 |
配置复杂度 | 中等 | 简单 | 简单 |
断点续传 | 支持 | 支持(有限) | 不支持 |
增量同步 | 支持 | 支持 | 支持 |
带宽限制 | 支持 | 不支持 | 不支持 |
并发控制 | 支持 | 有限支持 | 有限支持 |
传输速度 | 快 | 中等 | 中等 |
错误恢复 | 优秀 | 一般 | 一般 |
日志详细度 | 高 | 中等 | 低 |
过滤规则 | 丰富 | 基础 | 基础 |
常用命令 | rclone sync/copy |
aws s3 sync/cp |
mc mirror/cp |
监控进度 | 详细 | 基础 | 基础 |
存储服务支持 | 多种 | 主要是S3兼容 | 仅MinIO/S3 |
内存占用 | 中等 | 低 | 低 |
适用场景 | - 大规模迁移 - 定期同步 - 复杂规则 - 需要详细监控 |
- 简单迁移 - AWS生态 - 基础S3操作 |
- MinIO日常管理 - 简单迁移 - 基础操作 |
特殊优势 | - 功能最全面 - 性能最好 - 配置灵活 |
- AWS生态集成 - 命令简单 - 广泛使用 |
- MinIO原生工具 - 简单直观 - 管理功能全面 |
主要缺点 | - 配置较复杂 - 学习曲线陡 |
- 功能相对有限 - 不支持带宽限制 |
- 功能较基础 - 性能一般 |
推荐场景 | - 大规模数据迁移 - 需要精细控制传输过程 - 复杂的同步规则 - 跨多种存储服务传输 |
- AWS/S3生态系统内使用 - 简单的迁移任务 - 需要脚本自动化 - 团队已熟悉AWS工具 |
- MinIO日常管理操作 - 简单的数据迁移 - 需要MinIO特定功能 - 轻量级使用场景 |
实际操作
选用 rclone
进行数据迁移
# 运行配置向导
rclone config
按照向导选择下面的内容
# 按照提示输入:
# n) New remote
# name> minio-source (输入名称)
# Storage> s3 (选择 s3)
# provider> Minio (选择 Minio)
# env_auth> false (选择 false)
# access_key_id> (输入 access key)
# secret_access_key> (输入 secret key)
# endpoint> (输入 MinIO 地址,如 http://localhost:9000)
# location_constraint>
# acl>
配置文件
生成配置文件路径
~/.config/rclone/rclone.conf
大概样子这样,可以手动编辑
[prod-60-old]
type = s3
provider = Minio
env_auth = false
access_key_id = xxxxx
secret_access_key = xxxxxx
endpoint = http://xxxxx
[prod-60-new]
type = s3
provider = Minio
access_key_id = xxxx
secret_access_key = xxxx
endpoint = http://xxxx
我的目标是将 prod-60-old
数据全部迁移到 prod-60-new
同步全部桶
#!/bin/bash
# 配置
SOURCE="prod-60-old"
DEST="prod-60-new"
LOG_FILE="sync_$(date +%Y%m%d_%H%M%S).log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 开始同步
log "开始全量同步"
# 获取所有桶并检查命令是否成功
bucket_list=$(rclone lsd ${SOURCE}:)
if [ $? -ne 0 ]; then
log "获取桶列表失败"
exit 1
fi
# 从输出中提取桶名
echo "$bucket_list" | while read -r line; do
bucket=$(echo "$line" | awk '{print $5}')
log "开始同步桶: $bucket"
# 修改后的同步命令
rclone sync \
${SOURCE}:${bucket} \
${DEST}:${bucket} \
-P \
--transfers 8 \
--checkers 16 \
--stats 30s \
--stats-one-line \
--retries 3 \
--low-level-retries 10 \
--timeout 60s \
--contimeout 60s \
--buffer-size 64M \
--max-backlog 10000 \
--size-only \
--ignore-times \
--no-update-modtime \
2>> "$LOG_FILE"
# 检查同步结果
if [ $? -eq 0 ]; then
log "桶 $bucket 同步成功"
else
log "警告: 桶 $bucket 同步失败"
fi
log "------------------------"
done
log "全部同步完成"
慢慢等待吧。。。