作者: tidb菜鸟一只 原文来源: https://tidb.net/blog/61d4adc0
一、首先通过docker安装minio
以下是最新版,有坑,建议装2021版
1. 拉取docker镜像
docker pull minio/minio
2. 设置minio用到的文件路径
mkdir minio
进入minio目录:
cd minio
mkdir data
mkdir config
3. 启动服务:注意,这里要单独设置console的端口,不然会报错,且无法访问
这种安装方式 MinIO 自定义 Access 和 Secret 密钥要覆盖 MinIO 的自动生成的密钥
docker run --name minio \
-p 9000:9000 \
-p 9999:9999 \
-d --restart=always \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=admin123" \
-v /root/minio/data:/data \
-v /root/minio/config:/root/.minio \
minio/minio server /data \
--console-address '0.0.0.0:9999'
4. 防火墙设置,需要为minio开放两个端口,一个9000端口,一个静态端口,此处为9999
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
5. 登录客户端(浏览器):注意—>此处的端口,是你设置的console的端口:9999
http://10.10.10.15:9999
此处的用户名密码为启动服务时,设置的用户名密码:admin admin123:
综上,minio部署成功。
但是新版比较难用,换个老版本的。
1. 拉取docker镜像---2021年6月17日版
docker pull minio/minio:RELEASE.2021-06-17T00-10-46Z
2. 设置minio用到的文件路径
mkdir minio
进入minio目录:
cd minio
mkdir data
mkdir config
3. 启动服务:注意,这里要单独设置console的端口,不然会报错,且无法访问
这种安装方式 MinIO 自定义 Access 和 Secret 密钥要覆盖 MinIO 的自动生成的密钥
docker run --name minio2021 \
-p 9000:9000 \
-d --restart=always \
-e "MINIO_ACCESS_KEY=admin" \
-e "MINIO_SECRET_KEY=admin123" \
-v /root/minio/data:/data \
-v /root/minio/config:/root/.minio \
minio/minio:RELEASE.2021-06-17T00-10-46Z server /data
4. 防火墙设置,需要为minio开放9000端口
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
5. 登录客户端(浏览器):注意—>此处的端口,是你设置的console的端口:9000
http://10.10.10.15:9000
此处的用户名密码为启动服务时,设置的用户名密码:admin admin123:
综上,minio部署成功。
python测试
pip install minio
from minio import Minio
from minio.error import S3Error
try:
client = Minio('10.10.10.15:9000',access_key='admin',secret_key='admin123',secure=False)
found = client.bucket_exists("dong")
except S3Error as e:
print("error:", e)
print(found)# 返回布尔值 True or False
# file_path = r'E:\desktop\system.sql'
#
# client.fput_object("dong", "system.sql", file_path)
# # 文件不存在会报错FileNotFoundError
file_path = r'E:\desktop\1.sql'
data = client.get_object("dong", "system.sql")
with open(file_path,"wb") as fp:
for d in data.stream(1024):
fp.write(d)
client.fget_object("buk2", "1.jpg", "/opt/static/new.jpg")
file_name='1.txt'
client.remove_object("buk2", file_name)
client.remove_objects("buk2", ["baidu.html", "taobao.html"])
客户端测试
10.10.10.16安装客户端
```
下载 mc 客户端
cd /data
wget https://dl.minio.io/client/mc/release/linux-amd64/mc
chmod +x mc
cp mc /usr/bin
在 mc 客户端添加主机信息
mc config host add myminio http://10.10.10.15:9000 admin admin123
查看 mc 客户端已经添加的主机信息
mc config host ls myminio
在 minio 中创建名为 tidbbackup 的 buket
mc mb myminio/tidbbackup
上传文件到 bucket 中
echo 'test_upload' > minio_test_upload.log
mc cp minio_test_upload.log myminio/tidbbackup
查看 buket 中的文件
mc ls myminio/tidbbackup
下载 buket 中的文件
mc cp myminio/tidbbackup/minio_test_upload.log /tmp/
cat /tmp/minio_test_upload.log
删除 buket 中的文件
mc rm myminio/tidbbackup/minio_test_upload.log
在 minio 中查看创建的 buket
mc ls myminio
mc ls myminio/tidbbackup
级联删除目录
mc rm myminio/tidbbackup/bak_20210922/ --recursive --force
递归强制删除8天之前的文件,单位支持天,小时,分钟等
mc rm myminio/tidbbackup/fullbackup/ --recursive --force --older-than 8d
```
二、通过minio来测试tidb的br备份到s3存储
1.首先是备份到本机,备份时需要每个节点都创建本地目录,恢复时需要将所有文件拷贝到每个节点的本地目录,比较麻烦
wget https://download.pingcap.org/tidb-toolkit-v5.4.3-linux-amd64.tar.gz
tar -xvzf tidb-toolkit-v5.4.3-linux-amd64.tar.gz
/home/tidb/tidb-toolkit-v5.4.3-linux-amd64/bin
mkdir /tmp/backup
chmod 777 /tmp/backup
每个tikv节点都要创建
备份表
./br backup table --pd "10.10.10.16:2379" --db "test" --table "emp" --storage " local:///tmp/backup " --ratelimit 120 --log-file backup_emp.log
备份库
mkdir /tmp/backup1
chmod 777 /tmp/backup1
./br backup db --pd "10.10.10.16:2379" --db "test" --storage " local:///tmp/backup1 " --ratelimit 120 --log-file backup_test.log
drop table emp
恢复表
./br restore table --pd "10.10.10.16:2379" --db "test" --table "emp" --storage " local:///tmp/backup " --log-file restore_emp.log
drop database test
恢复库
./br restore db --pd "10.10.10.16:2379" --db "test" --storage " local:///tmp/backup1 " --log-file restore_test.log
2.通过minio来备份及恢复
export AWS_ACCESS_KEY_ID=admin
export AWS_SECRET_ACCESS_KEY=admin123
./br backup table --db test --table t1 --ratelimit 60 --pd "10.10.10.14:2379" --storage " s3://tidbbackup/bak_20230725 " --send-credentials-to-tikv=true --s3.endpoint " http://10.10.10.15:9000 " --log-file /tmp/backup.log
truncate table test.t1;
export AWS_ACCESS_KEY_ID=admin
export AWS_SECRET_ACCESS_KEY=admin123
./br restore table --db test --table t1 --ratelimit 60 --pd "10.10.10.14:2379" --storage " s3://tidbbackup/bak_20230725 " --send-credentials-to-tikv=true --s3.endpoint " http://10.10.10.15:9000 " --log-file /tmp/restore.log