Personal learning records
数据库备份脚本
数据库备份脚本

数据库备份脚本

xbackup.sh

#!/bin/bash

#备份策略:
#1全备、2增量、3增量、4差异、5增量、6增量、7差异

#由于中文英文系统date获取到的时间格式不一样,执行前需先把语言设为英文,执行完再改回去
if [ $LANG != “LANG=en_US.UTF-8” ]; then
language=”$LANG”
export LANG=en_US.UTF-8
fi

user=备份用户
pass=密码

mkdir -p /opt/data/full #全量存放目录
mkdir -p /opt/data/increase #增量存放目录
mkdir -p /opt/data/diff #差异存放目录
mkdir -p /opt/data/log #备份日志目录


#获取日期,决定way备份策略的值
day=$(date | awk ‘{print $1}’)
if [ $day == “Mon” ]; then
way=1
elif [ $day == “Tue” -o $day == “Wed” -o $day == “Fri” -o $day == “Sat” ]; then
way=2
elif [ $day == “Sun” -o $day == “Sun” ]; then
way=3
fi

#发邮件
function send(){
cat /opt/data/log/”$(date ‘+%Y%m%d’).log” | mail -s “备份失败,及时查看” aa3520886457@gmail.com &> /dev/null
}

#全量备份策略
function ql(){
innobackupex –user=$user –password=$pass /opt/data/full &> /opt/data/log/”$(date ‘+%Y%m%d’).log”

cat /opt/data/log/”$(date ‘+%Y%m%d’).log” | grep failed &> /dev/null
if [ $? -eq 0 ]; then
send
fi
}

#增量备份策略
function zl(){
if [ $day == “Tue” ]; then
base=$(ls -t /opt/data/full | awk ‘NR==1 {print}’) #周二以周一备份为基
innobackupex –user=$user –password=$pass –incremental /opt/data/increase –incremental-basedir=/opt/data/full/$base &> /opt/data/log/”$(date ‘+%Y%m%d’).log”
elif [ $day == “Fri” ]; then
base=$(ls -t /opt/data/diff | awk ‘NR==1 {print}’) #周五以周四为基
innobackupex –user=$user –password=$pass –incremental /opt/data/increase –incremental-basedir=/opt/data/diff/$base &> /opt/data/log/”$(date ‘+%Y%m%d’).log”
else
base=$(ls -t /opt/data/increase | awk ‘NR==1 {print}’) #其余增量以增量目录下最新文件为基
innobackupex –user=$user –password=$pass –incremental /opt/data/increase –incremental-basedir=/opt/data/increase/$base &> /opt/data/log/”$(date ‘+%Y%m%d’).log”
fi

cat /opt/data/log/”$(date ‘+%Y%m%d’).log” | grep failed &> /dev/null
if [ $? -eq 0 ]; then
send
fi
}

#差异备份策略
function cy(){
base=$(ls -t /opt/data/full | awk ‘NR==1 {print}’) #差异备份以全量目录下最新文件为基
innobackupex –user=$user –password=$pass –incremental /opt/data/diff –incremental-basedir=/opt/data/full/$base &> /opt/data/log/”$(date ‘+%Y%m%d’).log”

cat /opt/data/log/”$(date ‘+%Y%m%d’).log” | grep failed &> /dev/null
if [ $? -eq 0 ]; then
send
fi
}

case $way in
1)
ql
;;
2)
zl
;;
3)
cy
;;
esac

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注