Skip to content

MinIO 操作命令

1. mc 客户端介绍

mc(MinIO Client)是 MinIO 提供的命令行工具,用于管理和操作 MinIO 服务器。它兼容 Amazon S3 API,支持所有 S3 操作,同时提供了一些扩展功能。

2. mc 客户端安装

2.1 二进制安装

bash
# 下载 mc 客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc

# 添加执行权限
chmod +x mc

# 移动到系统路径
mv mc /usr/local/bin/

2.2 Docker 安装

bash
docker run --rm -it minio/mc

3. mc 客户端配置

3.1 配置 MinIO 服务器别名

bash
# 格式:mc alias set <alias> <url> <access-key> <secret-key>
mc alias set myminio http://localhost:9000 admin password@123

3.2 查看配置的别名

bash
mc alias list

3.3 移除别名

bash
mc alias remove myminio

4. 基本操作命令

4.1 Bucket 操作

创建 Bucket

bash
# 格式:mc mb <alias>/<bucket-name>
mc mb myminio/test-bucket

删除 Bucket

bash
# 格式:mc rb <alias>/<bucket-name>
mc rb myminio/test-bucket

# 强制删除非空 Bucket
mc rb --force myminio/test-bucket

列出 Bucket

bash
# 列出所有 Bucket
mc ls myminio

# 列出 Bucket 中的文件
mc ls myminio/test-bucket

# 递归列出所有文件
mc ls -r myminio/test-bucket

# 显示详细信息
mc ls -la myminio/test-bucket

4.2 对象操作

上传文件

bash
# 上传单个文件
mc cp test.txt myminio/test-bucket/

# 上传目录
mc cp -r /path/to/dir myminio/test-bucket/

# 上传所有 .txt 文件
mc cp *.txt myminio/test-bucket/

# 显示上传进度
mc cp -v test.txt myminio/test-bucket/

下载文件

bash
# 下载单个文件
mc cp myminio/test-bucket/test.txt ./

# 下载目录
mc cp -r myminio/test-bucket/dir ./

# 下载所有 .txt 文件
mc cp myminio/test-bucket/*.txt ./

# 显示下载进度
mc cp -v myminio/test-bucket/test.txt ./

删除文件

bash
# 删除单个文件
mc rm myminio/test-bucket/test.txt

# 删除目录
mc rm -r myminio/test-bucket/dir

# 删除所有 .txt 文件
mc rm myminio/test-bucket/*.txt

# 强制删除
mc rm --force myminio/test-bucket/test.txt

复制文件

bash
# 在同一个 MinIO 服务器内复制
mc cp myminio/test-bucket/test.txt myminio/test-bucket/test-copy.txt

# 在不同 MinIO 服务器间复制
mc cp myminio/test-bucket/test.txt otherminio/test-bucket/

移动文件

bash
# 在同一个 MinIO 服务器内移动
mc mv myminio/test-bucket/test.txt myminio/test-bucket/test-moved.txt

# 在不同 MinIO 服务器间移动
mc mv myminio/test-bucket/test.txt otherminio/test-bucket/

查看文件信息

bash
# 查看单个文件信息
mc stat myminio/test-bucket/test.txt

# 查看目录信息
mc stat myminio/test-bucket/dir

4.3 共享文件

生成临时访问 URL

bash
# 生成 7 天有效的访问 URL
mc share download --expire 7d myminio/test-bucket/test.txt

# 生成 1 小时有效的上传 URL
mc share upload --expire 1h myminio/test-bucket/

列出共享链接

bash
mc share list

取消共享链接

bash
mc share stop <share-url>

5. 高级操作命令

5.1 版本控制

启用版本控制

bash
mc version enable myminio/test-bucket

禁用版本控制

bash
mc version disable myminio/test-bucket

列出对象版本

bash
mc ls --versions myminio/test-bucket

还原旧版本

bash
# 获取版本 ID
mc ls --versions myminio/test-bucket/test.txt

# 还原旧版本
mc cp myminio/test-bucket/test.txt#<version-id> myminio/test-bucket/test-restored.txt

5.2 生命周期管理

设置生命周期规则

bash
# 创建生命周期配置文件 lifecycle.json
cat > lifecycle.json << EOF
{
  "Rules": [
    {
      "ID": "expire-old-objects",
      "Status": "Enabled",
      "Filter": {
        "Prefix": "logs/"
      },
      "Expiration": {
        "Days": 30
      }
    }
  ]
}
EOF

# 应用生命周期规则
mc ilm import myminio/test-bucket < lifecycle.json

查看生命周期规则

bash
mc ilm ls myminio/test-bucket

移除生命周期规则

bash
mc ilm rm myminio/test-bucket --id expire-old-objects

5.3 桶策略管理

设置桶策略

bash
# 创建策略文件 policy.json
cat > policy.json << EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": ["*"]
      },
      "Action": ["s3:GetObject"],
      "Resource": ["arn:aws:s3:::test-bucket/*"]
    }
  ]
}
EOF

# 应用桶策略
mc policy set-json policy.json myminio/test-bucket

查看桶策略

bash
mc policy get myminio/test-bucket

移除桶策略

bash
mc policy remove myminio/test-bucket

5.4 加密管理

启用服务器端加密

bash
# 启用 SSE-KMS 加密
mc encrypt set sse-kms &lt;key-id&gt; myminio/test-bucket

# 启用 SSE-S3 加密
mc encrypt set sse-s3 myminio/test-bucket

查看加密配置

bash
mc encrypt get myminio/test-bucket

禁用加密

bash
mc encrypt remove myminio/test-bucket

6. 管理命令

6.1 服务器信息

bash
# 查看服务器信息
mc admin info myminio

6.2 服务器状态

bash
# 查看服务器状态
mc admin status myminio

6.3 服务器日志

bash
# 查看服务器日志
mc admin logs myminio

# 实时查看日志
mc admin logs --follow myminio

6.4 服务器配置

bash
# 查看服务器配置
mc admin config get myminio

# 设置服务器配置
mc admin config set myminio &lt;key&gt; &lt;value&gt;

# 重启服务器以应用配置
mc admin service restart myminio

6.5 节点管理

bash
# 列出所有节点
mc admin info myminio --json | jq .info.servers

# 查看节点状态
mc admin status myminio --node &lt;node-id&gt;

6.6 审计日志

bash
# 启用审计日志
mc admin audit enable myminio

# 禁用审计日志
mc admin audit disable myminio

# 查看审计日志配置
mc admin audit info myminio

6.7 监控指标

bash
# 查看实时指标
mc admin metrics myminio

# 查看 Prometheus 指标
mc admin prometheus generate myminio

7. 高级功能命令

7.1 数据同步

bash
# 同步本地目录到 MinIO
mc mirror /path/to/local myminio/test-bucket/

# 同步 MinIO 到本地目录
mc mirror myminio/test-bucket/ /path/to/local

# 增量同步
mc mirror --watch /path/to/local myminio/test-bucket/

# 显示同步进度
mc mirror -v /path/to/local myminio/test-bucket/

7.2 数据校验

bash
# 计算文件的 md5 校验值
mc hash test.txt

# 验证文件完整性
mc cp --md5 test.txt myminio/test-bucket/

7.3 批量操作

bash
# 创建批量操作文件 batch.json
cat > batch.json << EOF
{
  "version": "1",
  "jobs": [
    {
      "name": "copy-job",
      "operation": "copy",
      "source": {
        "type": "s3",
        "alias": "myminio",
        "bucket": "test-bucket",
        "prefix": "logs/"
      },
      "target": {
        "type": "s3",
        "alias": "myminio",
        "bucket": "test-bucket",
        "prefix": "archive/"
      }
    }
  ]
}
EOF

# 执行批量操作
mc batch run batch.json

7.4 加密和解密

bash
# 加密文件并上传
mc encrypt put --encrypt-key &lt;key&gt; test.txt myminio/test-bucket/

# 下载并解密文件
mc encrypt get --encrypt-key &lt;key&gt; myminio/test-bucket/test.txt ./

8. MinIO 服务器命令

8.1 启动 MinIO 服务器

bash
# 单机模式
minio server /data/minio --console-address :9001

# 分布式模式
minio server http://node{1...4}/data/disk{1...4} --console-address :9001

8.2 停止 MinIO 服务器

bash
# 使用 systemd 停止
systemctl stop minio

# 使用 kill 命令停止
kill $(pgrep minio)

8.3 查看 MinIO 服务器版本

bash
minio --version

9. 环境变量

9.1 服务器环境变量

环境变量描述默认值
MINIO_ROOT_USER管理员用户名minioadmin
MINIO_ROOT_PASSWORD管理员密码minioadmin
MINIO_VOLUMES数据目录
MINIO_OPTS额外选项
MINIO_SERVER_URL服务器 URL
MINIO_BROWSER是否启用控制台on

9.2 客户端环境变量

环境变量描述默认值
MC_ALIAS_<NAME>_URL别名对应的服务器 URL
MC_ALIAS_<NAME>_ACCESS_KEY别名对应的访问密钥
MC_ALIAS_<NAME>_SECRET_KEY别名对应的秘密密钥

10. 最佳实践

10.1 使用别名管理多个服务器

bash
# 配置多个服务器别名
mc alias set prod http://prod-minio:9000 prod-admin prod-password
mc alias set staging http://staging-minio:9000 staging-admin staging-password
mc alias set dev http://dev-minio:9000 dev-admin dev-password

# 在不同服务器间复制数据
mc cp prod/bucket/file staging/bucket/

10.2 自动化脚本

bash
#!/bin/bash

# 设置环境变量
export MC_ALIAS_MYMINIO_URL="http://localhost:9000"
export MC_ALIAS_MYMINIO_ACCESS_KEY="admin"
export MC_ALIAS_MYMINIO_SECRET_KEY="password@123"

# 上传备份文件
date=$(date +%Y%m%d)
tar -czf backup-$date.tar.gz /path/to/backup
mc cp backup-$date.tar.gz myminio/backup/

# 删除 30 天前的备份
mc rm --force --older-than 30d myminio/backup/

10.3 监控和告警

bash
# 生成 Prometheus 配置
mc admin prometheus generate myminio > prometheus-minio.yaml

# 集成到 Prometheus 和 Grafana
# 1. 将生成的配置添加到 Prometheus 配置文件中
# 2. 导入官方 Grafana 仪表板(ID: 13502)

11. 常见问题排查

11.1 连接失败

bash
# 检查服务器 URL 是否正确
mc alias list

# 检查网络连接
ping &lt;server-ip&gt;

# 检查端口是否开放
telnet &lt;server-ip&gt; 9000

11.2 权限错误

bash
# 检查访问密钥和秘密密钥
mc alias list

# 检查桶策略
mc policy get myminio/test-bucket

# 检查 IAM 策略
mc admin policy get myminio &lt;policy-name&gt;

11.3 上传失败

bash
# 检查磁盘空间
mc admin info myminio

# 检查文件大小限制
mc admin config get myminio | grep max

# 检查网络带宽
mc admin metrics myminio --json | jq .metrics.network

总结

mc 客户端提供了丰富的命令集,用于管理和操作 MinIO 服务器。通过学习这些命令,可以高效地管理 MinIO 存储,实现各种复杂的存储操作。在实际使用中,建议结合自动化脚本和监控工具,提高管理效率和可靠性。