Mysql 物理备份脚本
工具:xtrabackup 2.4.29
需求1:每周为一个循环,周一全量,周二增量,周三增量,周四差异,周五增量,周六增量,周天差异
需求2:完全后台执行
需求3:备份完整
需求4:日志记录
需求5:历史数据的处理
innobackupex对xtrabackup的封装,是percona推出的可靠物理备份工具,对于mysql,逻辑备份可以使用mysqldump、mysqlpump、mysqldumper,物理备份可以直接使用innobackupex
我这里直接使用yum安装的innobackupex工具
Percona Repo感兴趣可以也到官网选择对应版本下载,直接解压就能使用
# yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# yum install percona-xtrabackup-24
# yum install qpress ##innobackupex支持压缩导出,这里安装压缩工具
# innobackupex -version #查看版本信息
如果出现如下提示表示安装成功,我这里是2.4.29
ok有了工具我们开始 创建shell脚本
vim /backup.sh
编写内容
#!/bin/bash
User="用户"
Passwd="数据库登录密码"
backdir="/backup"
logPath="/var/log/backup.log"
#定义数组0为全量备份1为增量备份2为差异备份
day=(2 0 1 1 2 1 1)
# 0 1 2 3 4 5 6
daytime=`date +%w`
#full全量,incr增量,diff差异
full(){
#移动之前的日志
mv $logPath $backdir
#压缩之前的备份
tar cf /tmp/mysql_back_`date +%F`.tar.gz "$backdir" && \
rm -rf $backdir
#创建备份目录结构
mkdir -p $backdir/{full,incr,diff}
#执行完整备份
innobackupex --user=$User --password=$Passwd $backdir/full
#记录备份日志
echo "full `ls $backdir/full |tail -n 1`" >> $logPath
}
other(){
#$1incr|diff 备份的类型
#$2需要基于的完整路径
innobackupex --user=$User --password=$Passwd --incremental $backdir/$1 --incremental-basedir=$2
#记录备份日志
echo "$3 `ls $backdir/$3 |tail -n 1`" >> $logPath
}
case ${day[$daytime]} in
0)
full
;;
1)
#获取上一次备份的类型
type=$(tail -n 1 $logPath|awk '{print $1}')
#获取上一次备份的目录
time=$(tail -n 1 $logPath|awk '{print $2}')
#执行增量备份
other incr $backdir/$type/$time incr
;;
2)
#获取上一次完整备份的目录
time=$(grep full $logPath|awk '{print $2}')
#执行差异备份
other diff $backdir/full/$time diff
;;
esac
总结
执行脚本需要有第一次的全量备份做基础不然就会报错
比如从周一开始执行就不会有问题,或者修改数组先跑一遍周一的,或者手动全量备份到全量目录一次
希望能够帮助到大家!!