备份数据库所有非系统库,可选备份docker还是本地的mysql,压缩包可包含路径或不包含路径,自动删除7天前的备份文件
首先创建 mysql.sh 备份脚本
#!/bin/bash
databases=($(docker exec mysql mysql -uroot -pPassword -e "show databases"))
basepath='/tmp/mysql/backup/'
if [ ! -d "$basepath" ]; then
mkdir -p "$basepath"
fi
for db in ${databases[*]}
do
if [[ $db == "Database" || $db == "information_schema" || $db == "performance_schema" || $db == "mysql" || $db == "sys" ]]; then
continue
fi
if [ ! -d "$basepath$db" ]; then
mkdir -p "$basepath$db"
fi
# docker模式备份
docker exec mysql mysqldump -uroot -pW-z3DSOd --single-transaction $db > $basepath$db/$db-$(date +%Y%m%d).sql
# 正常模式备份
# mysqldump -uroot -pW-z3DSOd --single-transaction $db > $basepath$db/$db-$(date +%Y%m%d).sql
# 压缩包内带目录
# tar zPvf $basepath$db/$db.$(date +%Y%m%d).tar.gz $basepath$db/$db-$(date +%Y%m%d).sql
# 压缩包内不带目录
tar zcvf $basepath$db/$db.$(date +%Y%m%d).tar.gz -C$basepath$db/ $db-$(date +%Y%m%d).sql
# 删除7天前的备份
# find $basepath$db* -mtime +7 -name '*.tar.gz' -exec rm -rf {} \;
# 只保留最新的7个备份
find $basepath$db* -name '*.tar.gz' | sort -t"." -k2n | head -n -7 | xargs rm -rf
done
rm -rf $basepath/*/*.sql
然后是添加执行权限
chmod +x /tmp/mysql/mysql.sh
最后是设置定时执行脚本
crontab -e
在最后添加一行,每天定时执行
0 2 * * * /tmp/mysql/mysql.sh