Minio备份
Minio备份
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
. /etc/profile
## 备份时间戳
## 备份类型 oss|hostPath
token="KrAyu4HaquejTMvXM9jCaCkeXMMWLG9McOyiV6DENYj6+j0skBe6qc6CHL2\/WU1FBnpGbAJTSekCcw4tTLiICkaYZ3QGwJPVdKcIpi7MaKP9srPIykg=="
webhook_url="https://*********/api/server/save"
# 企微相关配置
db_type="minio"
db_env="正式环境"
host=$(hostname)
TIME=`date +%Y%m%d`
bak_type="hostPath"
base_dir="/data/backup/minio"
back_dir="${base_dir}/${TIME}"
last_sun=`date +%Y%m%d -d "last sun"`
last_sun_dir="${base_dir}/${last_sun}"
today_day=`date +%w`
## 备份开始时间
start_time=$(date "+%F %X")
# 备份保留时间
keep_time="15"
# 磁盘使用率达到百分之85
MAX_DISK_PERCENT="85"
if [[ ! -d ${last_sun_dir} ]]; then
mkdir -p ${last_sun_dir}
fi
# 判断当前磁盘剩余空间是否满足要求
CURRENT_PERCENT=$(df -P ${base_dir} | tail -1 | awk '{print $5 }' | cut -d'%' -f1)
if [ "${CURRENT_PERCENT}" -ge "${MAX_DISK_PERCENT}" ]; then
cat > ${base_dir}/webhook.json << EOF
{"table_name":"rt_backup","data":[
{
"name":"$bak_type",
"object":"$db_env",
"status":"失败",
"msg":"磁盘空间不足",
"ins_date":"$start_time"
}
]}
EOF
curl -X POST -s -H "Token: ${token}" -H 'Content-Type: application/json' -d @${base_dir}/webhook.json ${webhook_url}
exit 0
fi
# minio 配置
minio_host='http://10.201.40:31114'
minio_ak='staship'
minio_sk='starh022!'
# 对象存储相关配置
oss_ep=''
oss_ak=''
oss_sk=''
oss_bucket=""
oss_bak_dir="${cos_bucket}/${db_type}"
# 检测是否安装 rclone mc
## rclone工具路径
rclone_path="/usr/bin/rclone"
## mc工具地址
mc_path="/usr/bin/mc"
func() {
bdir_size=$(du -sm $1 2>/dev/null |awk '{print $1}')
bdir_files=$(find $1 -type f|wc -l)
end_time=$(date "+%F %X")
if [ ${bdir_size} -lt 1 ];then
bak_status_col='warning'
bk_status="Failed"
else
bak_status_col='info'
bk_status="Succes"
fi
cat > ${base_dir}/webhook.json << EOF
{"table_name":"rt_backup","data":[
{"name":"$bak_type",
"object":"$db_env",
"status":"$bk_status",
"msg":"$bak_status_col",
"ins_date":"$start_time"
}
]}
EOF
curl -X POST -s -H "Token: ${token}" -H 'Content-Type: application/json' -d @${base_dir}/webhook.json ${webhook_url}
}
if [[ ! -f ${rclone_path} ]]; then
wget https://ykj-privatize.oss-cn-shenzhen.aliyuncs.com/%E5%B8%B8%E7%94%A8%E8%BD%AF%E4%BB%B6/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cp rclone-*-linux-amd64/rclone /usr/bin/
chown root:root ${rclone_path}
chmod 755 ${rclone_path}
fi
## 检测是否安装 mc
if [[ ! -f ${mc_path} ]]; then
wget -O ${mc_path} https://ykj-privatize.oss-cn-shenzhen.aliyuncs.com/%E5%B8%B8%E7%94%A8%E8%BD%AF%E4%BB%B6/mc
chmod 755 ${mc_path}
fi
## 配置minio api
${mc_path} config host add minio ${minio_host} ${minio_ak} ${minio_sk} --api s3v4
## 备份相关设定
if [ ${bak_type} == "oss" ]; then
if [ ${oss_ep} ] && [ ${oss_ak} ] && [ ${oss_sk} ] && [ ${oss_bucket} ];then
## 生成 rclone配置文件
rclone_config="/root/.config/rclone"
if [[ ! -f ${rclone_config}/rclone.conf ]]; then
mkdir ${rclone_config}
cat > ${rclone_config}/rclone.conf << EOF
[minio]
type = s3
env_auth = false
provider = Minio
access_key_id = ${minio_ak}
secret_access_key = ${minio_sk}
region = us-east-1
endpoint = ${minio_host}
[oss]
type = s3
provider = Other
env_auth = false
access_key_id = ${cos_ak}
secret_access_key = ${cos_sk}
endpoint = ${cos_ep}
EOF
fi
else
echo "oss 配置为空!!!"
exit 0
fi
## 挂载对象存储
if ! $(mountpoint -q ${base_dir}); then
/usr/bin/rclone mount oss:${cos_bak_dir} /data/backup --log-file=/var/log/rclone/rclone.log --log-level=INFO --log-format=date,time,microseconds,pid,longfile,shortfile --daemon
fi
elif [ ${bak_type} == "hostPath" ]; then
## 生成 rclone配置文件
rclone_config="/root/.config/rclone"
if [ -f $rclone_config/rclone.conf ] ; then
rm -rf $rclone_config/rclone.conf
fi
if [[ ! -f ${rclone_config}/rclone.conf ]]; then
mkdir ${rclone_config}
cat > ${rclone_config}/rclone.conf << EOF
[minio]
type = s3
env_auth = false
provider = Minio
access_key_id = ${minio_ak}
secret_access_key = ${minio_sk}
region = us-east-1
endpoint = ${minio_host}
EOF
fi
else
echo "${bak_type} NOT NULL"
exit 1
fi
bucket_list=($(mc ls minio| awk '{print $NF}'|tr -d '/'))
## 备份
if [ `ps -ef|grep rclone|grep -v -E "mount|grep"` ];then
echo "已存在相关备份!!!"
exit 2
else
if [ $today_day -eq 0 ];then
mkdir -p ${back_dir}
cd ${back_dir}
for bucket in ${bucket_list[@]};do
${rclone_path} copy minio:${bucket} -P ${back_dir}/${bucket} --log-file=${back_dir}/miniodump-${bucket}.log -q
done
func
elif [ $today_day -ne 0 ];then
cd ${last_sun_dir}
for bucket in ${bucket_list[@]};do
${rclone_path} copy minio:${bucket} -P ${last_sun_dir}/${bucket} --log-file=${last_sun_dir}/miniodump-${bucket}.log -q
done
func
fi
fi
# 删除15天前的文件目录
find ${base_dir} -maxdepth 1 -type d -mtime +${keep_time} |xargs rm -rf {};
本文来自博客园,作者:小星奕的快乐,转载请注明原文链接:https://www.cnblogs.com/superzed/articles/17303133.html

浙公网安备 33010602011771号