MinIO客户端(mc)实现数据迁移、备份还原

本文介绍了如何通过mc命令在Docker中管理MinIO配置,包括添加新的服务、迁移数据(全量和增量)、以及查看状态和执行其他命令。重点展示了如何使用mcmirror进行跨MinIO服务的数据同步,并提到了注意事项和非标准用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.概述

mc 命令提供了一个方便管理 ~/.mc/config.json 配置文件中的主机信息的方式,你也可以用文本编辑器手动修改这个配置文件。
通过minio提供的客户端实现资源迁移,本文章的mc通过docker创建。
minio1的api地址是192.168.180.45:39000
minio2的api地址是192.168.180.37:39000

二、安装mc

1、用docker容器运行

docker run -it --entrypoint=/bin/sh minio/mc

2、直接安装在操作系统

[root@dev32 ~]# wget https://dl.minio.org.cn/client/mc/release/linux-amd64/mc --no-check-certificate
[root@dev32 ~]# chmod +x mc
[root@dev32 ~]# mv mc /usr/bin/

三.设置连接串

1、查看 cat /root/.mc/config.json 里的配置

{
        "version": "10",
        "aliases": {
                "gcs": {
                        "url": "https://storage.googleapis.com",
                        "accessKey": "YOUR-ACCESS-KEY-HERE",
                        "secretKey": "YOUR-SECRET-KEY-HERE",
                        "api": "S3v2",
                        "path": "dns"
                },
                "local": {
                        "url": "http://localhost:9000",
                        "accessKey": "",
                        "secretKey": "",
                        "api": "S3v4",
                        "path": "auto"
                },
                "minio_uat": {
                        "url": "http://192.168.180.37:39000",
                        "accessKey": "admin",
                        "secretKey": "Qwe@1245",
                        "api": "s3v4",
                        "path": "auto"
                },
                "play": {
                        "url": "https://play.min.io",
                        "accessKey": "Q3AM3UQ867SPQQA43P2F",
                        "secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
                        "api": "S3v4",
                        "path": "auto"
                },
                "s3": {
                        "url": "https://s3.amazonaws.com",
                        "accessKey": "YOUR-ACCESS-KEY-HERE",
                        "secretKey": "YOUR-SECRET-KEY-HERE",
                        "api": "S3v4",
                        "path": "dns"
                }
        }
}

2、查看mc配置:mc alias list

[root@test2 ~]# mc alias ls
gcs   
  URL       : https://storage.googleapis.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v2
  Path      : dns

local 
  URL       : http://192.168.180.47:7000
  AccessKey : minio
  SecretKey : minio123
  API       : S3v4
  Path      : auto

minio1
  URL       : http://192.168.180.45:39000
  AccessKey : admin
  SecretKey : Qwe@1245
  API       : s3v4
  Path      : auto

minio2
  URL       : http://192.168.180.37:39080
  AccessKey : admin
  SecretKey : Qwe@1245
  API       : s3v4
  Path      : auto

play  
  URL       : https://play.min.io
  AccessKey : Q3AM3UQ867SPQQA43P2F
  SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
  API       : S3v4
  Path      : auto

s3    
  URL       : https://s3.amazonaws.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v4
  Path      : dns

3、查看mc配置:mc config host ls

[root@test2 ~]#  mc config host ls
gcs   
  URL       : https://storage.googleapis.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v2
  Path      : dns

local 
  URL       : http://192.168.180.47:7000
  AccessKey : minio
  SecretKey : minio123
  API       : S3v4
  Path      : auto

minio1
  URL       : http://192.168.180.45:39000
  AccessKey : admin
  SecretKey : Qwe@1245
  API       : s3v4
  Path      : auto

minio2
  URL       : http://192.168.180.37:39080
  AccessKey : admin
  SecretKey : Qwe@1245
  API       : s3v4
  Path      : auto

play  
  URL       : https://play.min.io
  AccessKey : Q3AM3UQ867SPQQA43P2F
  SecretKey : zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG
  API       : S3v4
  Path      : auto

s3    
  URL       : https://s3.amazonaws.com
  AccessKey : YOUR-ACCESS-KEY-HERE
  SecretKey : YOUR-SECRET-KEY-HERE
  API       : S3v4
  Path      : dns

[root@test2 ~]# 

4、添加新的minio地址

#添加新的minio服务地址
[root@dev32 ~]# mc alias set 名称 服务地址 用户名 密码
[root@dev32 ~]# mc alias set minio1 http://192.168.180.45:39000 admin Qwe@1245
[root@dev32 ~]# mc alias set minio2 http://192.168.180.37:39000 admin Qwe@1245

四、两个minio服务器迁移数据

#全量迁移,重名文件不覆盖,bucket不存在会自动创建
mc mirror minio1 minio2
#只是迁移某个bucket,以test为例,目标的bucket需要提前建好
mc mirror minio1/test minio2/test
#覆盖重名文件,加--overwrite
mc mirror --overwrite minio1/test minio2/test

五、备份还原数据

1、备份 mc mirror 或者 mc cp:

 #将 minio2 上的所有数据备份到  /root/miniobaktest/ 目录下
[root@test2 miniobaktest]# mc mirror --overwrite minio2 /root/miniobaktest/
[root@test2 miniobaktest]# mc cp --recursive minio2 /root/miniobaktest

#将 minio2上名为bucket1 的桶的数据备份到 /root/miniobaktest/bucket1 目录
[root@test2 miniobaktest]# mc mirror --overwrite minio2/bucket1 /root/miniobaktest/bucket1
[root@test2 miniobaktest]# mc cp --recursive minio2/bucket1 /root/miniobaktest/bucket1
 

2、同步备份(源bucket中的文件删除,备份bucket中的文件也同步删除):

## 可以直接:mc mirror --watch minio2 /root/miniobaktest/  备份全量和变化量,但是备份完了还有日志不停输出
# 1、先全量备份
[root@test2 miniobaktest]# mc mirror --overwrite minio2 /root/miniobaktest/

# 2、开启watch增量备份
[root@test2 miniobaktest]# mc mirror --watch minio2 /root/miniobaktest/

3、还原 mc mirror 或者 mc cp:

注:mc cp命令:恢复数据时,则要求新服务器上必须存在迁移服务器上所有的桶,否则会提示找不到对应桶而无法恢复数据。
注:mc mirror恢复的bucket都是非加密的

#将/root/miniobaktest/ 目录下的所有数据还原到 minio2 上
[root@test2 miniobaktest]# mc mirror --overwrite /root/miniobaktest/ minio2 
[root@test2 miniobaktest]# mc cp --recursive /root/miniobaktest/ minio2 

4、检查是否完全结束

#使用命令检查是否有未完整传输的文件,如果有未传输完全的文件,会在回显中列出:
mc ls --incomplete minio2

#如果有必要,可以删除某个桶中的残缺文件:
mc rm --incomplete $hostName/$bucket

六、MinIO Client (mc) 命令

mc命令详解:https://www.minio.org.cn/docs/minio/linux/reference/minio-mc.html

ls 列出文件和文件夹。
mb 创建一个存储桶或一个文件夹。
cat 显示文件和对象内容。
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷贝文件和对象。
mirror 给存储桶和文件夹做镜像。
find 基于参数查找文件。
diff 对两个文件夹或者存储桶比较差异。
rm 删除文件和对象。
events 管理对象通知。
watch 监听文件和对象的事件。
policy 管理访问策略。
session 为cp命令管理保存的会话。
config 管理mc配置文件。
update 检查软件更新。
version 输出版本信息。

获取集群信息

# 执行命令测试能否连通,如有文件或至少存在一个 Bucket,会在回显中列出:
mc ls minio2

# 执行命令获取集群数据大小,如果有文件或存在至少一个 Bucket,会在最后一行打印当前集群所有文件总大小:
mc du minio2

对拷(镜像)

#使用命令进行 Bucket 对拷,mc 无法实现集群全量对拷,单条命令只能逐个 Bucket 进行操作:
mc mirror $SrcCluster/$srcBucket $DestCluster
#例如:
mc mirror clusterA/bucketa clusterB
mc mirror 命令可以不指定 Dest 的 Bucket,如果 $DestCluster 不存在对应名称 Bucket,对拷过程中会自动创建。

#若要实现不停机对拷,可以使用以下命令:
mc mirror -w $srcCluster/Bucket $destCluster
#-w 参数可以让 mirror 命令持续监控某一目录。由于 mirror 只能对拷单Bucket,如果使用 Shell 脚本进行for 轮询实现集群对拷时,一旦Bucket 过多,此命令可能会造成大量监控线程,增加负载。

一些说明

无需担心数据分片等问题,哪怕节点数量不对等。

因为是直接从集群入口访问并获取数据,并不是 ”磁盘 to 磁盘“ 的迁移方式,某个节点上的某块磁盘究竟存的是纠删码还是分片的数据都没有关系,因为从集群地址中读出来的数据是完整的数据,这就是为什么要求一定要能获取到集群地址的原因。

Bucket 在 MinIO 中应被视为 ”挂载目录“ (mount),而不是 “磁盘目录” (mkdir)。

mc cp 命令需要在目标集群拥有同名 Bucket,mc mirror 不需要,同时 mc mirror 会自动保存目录的层级信息,mc cp 需要额外指定 --recursive 参数,请根据需要酌情选择。

mc mirror 的集群 to 集群、集群 to 本地用法并未在 官方文档 中列出,很可能属于 hack 用法,请注意可能存在的风险。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值