MinIO实现数据迁移(mc)
运行两个版本的minio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | version: '2.3' services: # 新版本 minio2023: image: minio/minio:RELEASE.2022-06-20T23-13-45Z.fips container_name: minio2023 restart: always environment: - MINIO_ACCESS_KEY=minioadmin - MINIO_SECRET_KEY=minioadmin - MINIO_ROOT_USER=minioadmin - MINIO_ROOT_PASSWORD=minioadmin - TZ=Asia/Shanghai volumes: - /etc/localtime:/etc/localtime command: server /data --console-address ":9090" -address ":9000" ports: - 9000:9000 - 9090:9090 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | version: '2.3' services: # 旧版本 minio2021: image: minio/minio:RELEASE.2021-06-17T00-10-46Z container_name: minio2021 environment: MINIO_ACCESS_KEY: admin MINIO_SECRET_KEY: admin123 command: server /data restart: always ports: - 19000:9000 - 19001:9001 |
部署一个 mc 容器,做数据迁移
启动一个mc容器,并进入容器中1 | docker run -it --entrypoint=/bin/sh minio/mc:RELEASE.2023-06-06T13-48-56Z |
1 2 3 4 5 6 | # mc alias set 名称 服务地址 用户名 密码 # 设置minio2021的alias mc alias set minio2021 http: //ip:19000 admin admin123 # 设置minio2023的alias mc alias set minio2023 http: //ip:9000 minioadmin minioadmin |
迁移数据
mc迁移数据通常有下面三种场景:
1 2 3 4 5 6 7 8 9 | #1. 全量迁移,重名文件不覆盖,如bucket不存在,会自动创建 mc mirror minio2021 minio2023 #2. 只迁移某个bucket,以test为例,迁移的目标bucket需要提前创建 mc mirror minio2021/test minio2023/test #test要提前在minio2023中创建 #3. 加上--overwrite参数,覆盖重名文件 mc mirror --overwrite minio2021 minio2023 mc mirror --overwrite minio2021/test minio2023/test |
这里使用第一种方式,全量迁移,重名文件不覆盖,如bucket不存在,会自动创建
1 | mc mirror minio2021 minio2023 |
通过minio 界面查看数据是否迁移成功
MinIO Client (mc) 命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ls 列出文件和文件夹。 mb 创建一个存储桶或一个文件夹。 cat 显示文件和对象内容。 pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。 share 生成用于共享的URL。 cp 拷贝文件和对象。 mirror 给存储桶和文件夹做镜像。 find 基于参数查找文件。 diff 对两个文件夹或者存储桶比较差异。 rm 删除文件和对象。 events 管理对象通知。 watch 监听文件和对象的事件。 policy 管理访问策略。 session 为cp命令管理保存的会话。 config 管理mc配置文件。 update 检查软件更新。 version 输出版本信息。 |
例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 执行命令测试能否连通,如有文件或至少存在一个 Bucket,会在回显中列出: mc ls minio1 # 执行命令获取集群数据大小,如果有文件或存在至少一个 Bucket,会在最后一行打印当前集群所有文件总大小: mc du minio1 #查看cat ~/.mc/config.json里的配置 mc config host ls #查看所有alias mc alias ls #使用命令检查是否有未完整传输的文件,如果有未传输完全的文件,会在回显中列出: mc ls --incomplete minio1 #如果有必要,可以删除某个桶中的残缺文件: mc rm --incomplete $hostName/$bucket |
mc cp 命令需要在目标集群拥有同名 Bucket,mc mirror 不需要,同时 mc mirror 会自动保存目录的层级信息,mc cp 需要额外指定 --recursive 参数,请根据需要酌情选择。
迁移的时候遇到的报错
1 | mc: <ERROR> Unable to list comparison retrying.. S3 API Request made to Console port. S3 Requests should be sent to API port. |
通过单独查看 发现 是minio2023 的地址不对
我是直接从浏览器复制的地址 为 ip:9090 实则是9000 重新配置别名修改一下 地址就可以了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库