代码改变世界

mysql数据库定期备份

2022-08-29 11:59  ndzj  阅读(143)  评论(0编辑  收藏  举报

#!/bin/bash

username='xxxx' #数据库用户名
passw='xxxxx' #密码
date_ymd=`date +%Y_%m_%d` #年月日
date_hms=`date +%H%M%S` #时分秒
filedir='/root/data_backup/' # 备份目录
#数据库采用的安装方式docker/selfbuilt (容器/物理自建)
dbinstall_type='docker'

#创建以当天日期为名称的目录存放当天数据备份
if [ ! -d $filedir"$date_ymd" ];then
mkdir $filedir"$date_ymd"
fi

#一 docker安装的mysql实例执行函数
function dbinstall_docker {
#把需要备份的除系统库外的库过滤出来。
dbs=$(docker exec -i e38229ae3157 mysql -u${username} -p${passw} -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")

#循环备份每个库的表结构和数据,并进行压缩。
for db in $dbs;do
docker exec -i mysql mysqldump --single-transaction --set-gtid-purged=off -u${username} -p${passw} --default-character-set=utf8 --flush-logs -E -R --triggers -B ${db} |gzip > ${filedir}${date_ymd}/${db}_${date_ymd}_${date_hms}.sql.gz
done
}

#二 物理自建安装的mysql实例执行函数
function dbinstall_selfbuilt {
#把需要备份的除系统库外的库过滤出来。
dbs=$(mysql -u${username} -p${passw} -e "show databases" | grep -Ev "Database|sys|information_schema|performance_schema|mysql")

#循环备份每个库的表结构和数据,并进行压缩。
for db in $dbs;do
mysqldump --single-transaction --set-gtid-purged=off -u${username} -p${passw} --default-character-set=utf8 --flush-logs -E -R --triggers -B ${db} |gzip > ${filedir}${date_ymd}/${db}_${date_ymd}_${date_hms}.sql.gz
done
}
#判断是数据库是哪种安装方式,再进行备份
if [ "$dbinstall_type" == 'docker' ]
then
dbinstall_docker $username $passw $filedir $date_ymd $date_hms
elif [ "$dbinstall_type" == 'selfbuilt' ]
then
dbinstall_selfbuilt $username $passw $filedir $date_ymd $date_hms
else
echo '你好!请确认当前实例是采用什么安装方式,如docker安装,设置dbinstall_type=docker,自建实例设置dbinstall_type=selfbuilt'
fi

#定期清理7天前的备份
find ${filedir} -mtime +${data_back_day} -name "*.*" -exec rm -rf {} \;