下面的脚本主要功能:
1. 每天备份一次单个库我多个库,使用mysqldump命令来备份并tar进行压缩。
2. 定时周一、周三、周五、周日使用xtrabackup工具物理全备份并tar进行压缩
3. 每天执行脚本同时检查备份目录里的备份文件,只保留当月和上个月的备份文件
要计划任务配合来执行,可以设置每天凌晨2点执行1次
#!/bin/bash
[ ! -e /data/backups ] && mkdir -p /data/backups
# 备份存放目录
DataURL=/data/backups/sql/
# 文件名
DataName="sql$(date +%Y%m%d%H%M)"
# 数据库连接端口
Dport=1668
# 数据库用户名
Duser='root'
# 数据库密码
Dpwd='123456'
# 要单独备份的数据库名,可以设置多个库备份,空格做分隔
Datebases=(xds.shopmall)
wdate=`date +%w`
# 每周一全备份一次,使用xtrabackup工具备份,再用tar -zcpf打包压缩
if [ $wdate == "1" ] || [ $wdate == "3" ] || [ $wdate == "5" ] || [ $wdate == "7" ];then
/usr/bin/innobackupex --defaults-file=/etc/my.cnf --port=$Dport --user=$Duser --password=$Dpwd $DataURL$DataName
/usr/bin/tar -zcpf $DataURL$DataName.tar.gz $DataURL$DataName
rm -rf $DataURL$DataName
fi
# 每天备份一次xds.shopmall表,使用mysqldump命令进行热备
DataName="$(date +%Y%m%d)"
for d in ${Datebases[@]}
do
/usr/local/mysql/bin/mysqldump -R -E -port=$Dport -u$Duser -p$Dpwd $d > $DataURL$d$DataName
/usr/bin/tar -zcpf $DataURL$d$DataName.tar.gz $DataURL$d$DataName
rm -rf $DataURL$d$DataName
done
# 删除备份,只保留上一月和当月的备份
ndate=$(date +%Y%m)
m=$(date +%m)
# (判断是否是1月获取上个月的数值)
if [ $m == "01" ];then
ldate=$((ndate-89))
else
ldate=$((ndate-1))
fi
cd $DataURL
DelFile=`ls | grep -v -E "$ldate|$ndate" | xargs`
if [ $? -eq 0 ];then
/bin/rm -rf $DelFile
fi
exit
删除指定文件的方法 有种更简洁的方法
[ $? -eq 0 ] && rm -rf !($ntemp$dtemp1*|$ntemp$dtemp2) || exit
(但centos7.3用不了,7.4的以上可以用)