使用Minio Clinet将老版本Minio的数据迁移到新版本的Minio
1. 关于Minio Client:
MinIO Client是一个命令行工具,用于与Minio或云存储服务进行交互。它支持文件系统和Amazon S3兼容的云存储服务(AWS Signature v2和v4)。
MinIO Client mc 命令行工具提供了
ls
、cat
、cp
、mirror
和diff
等UNIX命令的现代替代方案,支持文件系统和Amazon s3兼容的云存储服务。mc 命令行工具是为与AWS S3 API兼容而构建的,并在MinIO和AWS S3上测试了预期的功能和行为。
MinIO不为其他S3兼容服务提供保证,因为它们的S3 API实现是未知的,因此不受支持。虽然mc命令可以按照文档的方式工作,但任何此类用法都要由您自己承担风险。
2. 迁移示例
2.1 部署两个版本的Minio实例
- 旧版本2019:minio/minio:RELEASE.2019-12-19T22:52:26Z
- 新版本2023:minio/minio:RELEASE.2023-03-24T21-41-23Z
version: '3'
services:
# 旧版本2019
minio2019:
image: minio/minio:RELEASE.2019-12-19T22:52:26Z
ports:
- 19000:9000
- 19001:9001
environment:
MINIO_ACCESS_KEY: admin
MINIO_SECRET_KEY: admin123
volumes:
- /usr/local/minio2019/data:/data
- /usr/local/minio2019/config:/root/.minio/
command: server /data
privileged: true
restart: always
# 新版本2023
minio2023:
image: minio/minio:RELEASE.2023-03-24T21-41-23Z
ports:
- 29000:9000
- 29001:9001
environment:
MINIO_ACCESS_KEY: admin
MINIO_SECRET_KEY: admin123
volumes:
- /usr/local/minio2023/data:/data
- /usr/local/minio2023/config:/root/.minio/
command: server --console-address ':9001' /data
privileged: true
restart: always
2.2 在2019版本Minio上创建一个名称为"test2019"的bucket,并上传一些测试文件,通过查看挂载目录可以看到:
[root@master minio2019]# tree /usr/local/minio2019/
/usr/local/minio2019/
├── config
│ └── certs
│ └── CAs
├── data
│ └── test2019
│ ├── image-01.png
│ ├── image-02.png
│ ├── image-03.png
│ └── image-04.png
2.3 部署一个 mc 容器,做数据迁移
启动一个mc容器,并进入容器中
docker run -it --entrypoint=/bin/sh minio/mc
分别设置 minio2019 和 minio2023 的alias
# mc alias set 别名 minio后端链接端口 管理员账号 管理员密码
# 设置minio2019的alias
mc alias set minio2019 http://ip:19000 admin admin123
# 设置minio2023的alias
mc alias set minio2023 http://ip:29000 admin admin123
2.4 迁移数据
mc迁移数据通常有下面三种场景:
#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/te
这里使用第一种方式,全量迁移,重名文件不覆盖,如bucket不存在,会自动创建
[root@master minio2019]# mc mirror minio2019 minio2023
2.5 查看迁移结果
[root@master minio2019]# tree /usr/local/minio2023
/usr/local/minio2023
├── config
│ └── certs
│ └── CAs
├── data
│ └── test2019
│ ├── image-01.png
│ ├── image-02.png
│ ├── image-03.png
│ └── image-04.png