#!/bin/bash
#周日全备,周一到周六增备,每次增备完都将增备应用到全备上
#将可以表示每天周几的数字定义为一个变量
zhouji=$(date +"%w")
#因为考虑到万一在备份的时候数据库崩掉,所以建两个备份目录
if ! ls /backup/perfect &>/dev/null
then
mkdir -p /backup/perfect
fi
if ! ls /backup1/perfect &> /dev/null
then
mkdir -p /backup1/perfect
fi
#创建一个文件,将备份的过程重定向进去
if ! ls /tmp/guocheng &> /dev/null
then
touch /tmp/guocheng
fi
#定义一个函数,为备份成功或失败之后的操作
caozuo1()
{
#将备份结果定义为一个变量
jieguo=$(cat /tmp/guocheng | tail -n -1 | awk '{print $3,$4}')
if [[ $jieguo = "completed OK!" ]]
then
echo "$(date +"%Y-%m-%d")日的备份已成功"|mail -s "备份" ch1yanzhi@163.com
echo "$(date +"%Y-%m-%d")日的备份已成功" >> /tmp/jieguo
else
echo "$(date +"%Y-%m-%d")日的备份失败,请查看原因"|mail -s "备份" ch1yanzhi@163.com
echo "$(date +"%Y-%m-%d")日的备份失败,请查看原因" >> /tmp/jieguo
exit 10
fi
}
#定义一个函数,为应用备份成功或失败之后的操作
caozuo2()
{
#将备份结果定义为一个变量
jieguo=$(cat /tmp/guocheng | tail -n -1 | awk '{print $3,$4}')
if [[ $jieguo = "completed OK!" ]]
then
echo "$(date +"%Y-%m-%d")日的备份已应用"|mail -s "应用" ch1yanzhi@163.com
echo "$(date +"%Y-%m-%d")日的备份已应用" >> /tmp/jieguo
else
echo "$(date +"%Y-%m-%d")日的备份应用失败,请查看原因"|mail -s "应用" ch1yanzhi@163.com
echo "$(date +"%Y-%m-%d")日的备份应用失败,请查看原因" >> /tmp/jieguo
exit 11
fi
}
#定义一个函数,为备份的操作
beifen()
{
if (( $zhouji == 0 ))
then
#做一个全备
innobackupex --no-timestamp --user=root --password=123 /$1/perfect &> /tmp/guocheng
caozuo1
sleep 2
#应用全备并且不回滚
innobackupex --apply-log --redo-only /$1/perfect &>> /tmp/guocheng
caozuo2
#创建存放增量备份的目录
if ! ls /$1/ | grep "increment" &> /dev/null
then
mkdir /$1/increment
fi
#删除上周的备份文件
if (( $(ls /$2 | wc -l ) != 0 ))
then
rm -rf /$2/*
fi
elif (( $zhouji == 1 ))
then
#在全备的基础上做增备
innobackupex --incremental --incremental-basedir=/$1/perfect/ --user=root --password=123 /$1/increment/ &> /tmp/guocheng
caozuo1
sleep 2
#将增量的目录名设置为一个变量
qidian1=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#将增备应用到全备上并且不回滚
innobackupex --apply-log --redo-only --incremental /$1/perfect/ --incremental-dir=/$1/increment/$qidian1/ &>> /tmp/guocheng
caozuo2
elif (( $zhouji == 6 ))
then
if (( $(ls /$1/increment/ | wc -l) ==0 ))
then
#在全备的基础上做增备
innobackupex --incremental --incremental-basedir=/$1/perfect/ --user=root --password=123 /$1/increment/ &> /tmp/guocheng
caozuo1
sleep 2
#将增量的目录名设置为一个变量
qidian1=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#将增备应用到全备上并且不回滚
innobackupex --apply-log --redo-only --incremental /$1/perfect/ --incremental-dir=/$1/increment/$qidian1/ &>> /tmp/guocheng
caozuo2
else
#将上一次增量的目录名设置为一个变量
qidian2=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#在上一次增备的基础上做增备
innobackupex --incremental --incremental-basedir=/$1/increment/$qidian2/ --user=root --password=123 /$1/increment/ &> /tmp/guocheng
caozuo1
sleep 2
#将本次增量的目录定义一个变量
qidian3=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#将本次增量应用到新的全备上,回滚
innobackupex --apply-log --incremental /$1/perfect/ --incremental-dir=/$1/increment/$qidian3/ &>> /tmp/guocheng
caozuo2
fi
else
if (( $(ls /$1/increment/ | wc -l) ==0 ))
then
#在全备的基础上做增备
innobackupex --incremental --incremental-basedir=/$1/perfect/ --user=root --password=123 /$1/increment/ &> /tmp/guocheng
caozuo1
sleep 2
#将增量的目录名设置为一个变量
qidian1=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#将增备应用到全备上并且不回滚
innobackupex --apply-log --redo-only --incremental /$1/perfect/ --incremental-dir=/$1/increment/$qidian1/ &>> /tmp/guocheng
caozuo2
else
#将上一次增量的目录名设置为一个变量
qidian2=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#在上一次增备的基础上做增备
innobackupex --incremental --incremental-basedir=/$1/increment/$qidian2/ --user=root --password=123 /$1/increment/ &> /tmp/guocheng
caozuo1
sleep 2
#将本次增量的目录定义一个变量
qidian3=$(ls -l /$1/increment/ | tail -n -1 | awk '{print $9}')
#将本次增量应用到新的全备上,并且不回滚
innobackupex --apply-log --redo-only --incremental /$1/perfect/ --incremental-dir=/$1/increment/$qidian3/ &>> /tmp/guocheng
caozuo2
fi
fi
}
if (( $(ls /backup/perfect/ | wc -l ) == 0 )) && (( $(ls /backup1/perfect/ | wc -l ) == 0 )) && (( $zhouji != 0 ))
then
#当两个全备备份目录都是是空的时候,不管是星期几,都要进行全备,其他的按照计划来,这样就保证了在第一次全备不是星期天的时候也可以进行全备
innobackupex --no-timestamp --user=root --password=123 /backup/perfect &> /tmp/guocheng
caozuo1
sleep 2
#应用全备并且不回滚
innobackupex --apply-log --redo-only /backup/perfect &>> /tmp/guocheng
caozuo2
#创建存放增量备份的目录
if ! ls /backup/ | grep "increment" &> /dev/null
then
mkdir /backup/increment
fi
elif (( $(ls /backup/perfect/ | wc -l ) == 0 )) && (( $zhouji == 0 ))
then
beifen backup backup1
elif (( $(ls /backup/perfect/ | wc -l ) != 0 )) && (( $zhouji != 0 ))
then
beifen backup backup1
elif (( $(ls /backup1/perfect/ | wc -l ) == 0 )) && (( $zhouji == 0 ))
then
beifen backup1 backup
elif (( $(ls /backup1/perfect/ | wc -l ) != 0 )) && (( $zhouji != 0 ))
then
beifen backup1 backup
else
echo "两个备份文件都不是空的,请至少清空一个"
echo "两个备份文件都不是空的,请至少清空一个" | mail -s "备份文件" ch1yanzhi@163.com
fi
备份脚本
最新推荐文章于 2024-05-12 04:44:58 发布