Linux下自动备份Mysql数据库

备份数据库所有非系统库,可选备份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

参考:https://cloud.tencent.com/developer/article/2027981

MySqlLinux

我来吐槽

*

*