1.编写全量备份脚本
代码如下:
# vim /root/DBFullyBak.sh //添加以下内容
#!/bin/bash
# Program
# use mysqldump to Fully backup mysql data per week!
# History
# 2015.08.25
# Path
# ....
BakDir=
/home/mysql/backup
LogFile=
/home/mysql/backup/bak
.log
Date=`
date
+%Y%m%d`
Begin=`
date
+
"%Y年%m月%d日 %H:%M:%S"
`
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
cd
$BakDir
/usr/local/mysql/bin/mysqldump
-uroot -p123456 --quick --all-databases --flush-logs --delete-master-logs --single-transaction > $DumpFile
/bin/tar
czvf $GZDumpFile $DumpFile
/bin/rm
$DumpFile
echo
开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile
cd
$BakDir
/daily
rm
-f *
2.编写增量备份脚本
代码如下:
# cat /root/DBDailyBak.sh //内容为下
#!/bin/bash
# Program
# use cp to backup mysql data everyday!
# History
# 2015.08.25
# Path
# ....
BakDir=
/home/mysql/backup/daily
BinDir=
/home/mysql/data
LogFile=
/home/mysql/backup/bak
.log
BinFile=
/home/mysql/data/mysql-bin
.index
/usr/local/mysql/bin/mysqladmin
-uroot -p123456 flush-logs
#这个是用于产生新的mysql-bin.00000*文件
Counter=`
wc
-l $BinFile |
awk
'{print $1}'
`
NextNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。
for
file
in
`
cat
$BinFile`
do
base=`
basename
$
file
`
#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
NextNum=`
expr
$NextNum + 1`
if
[ $NextNum -
eq
$Counter ]
then
echo
$base skip! >> $LogFile
else
dest=$BakDir/$base
if
(
test
-e $dest)
#test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
then
echo
$base exist! >> $LogFile
else
cp
$BinDir/$base $BakDir
echo
$base copying >> $LogFile
fi
fi
done
echo
`
date
+
"%Y年%m月%d日 %H:%M:%S"
` $Next Bakup succ! >> $LogFile
3.设置
crontab
任务,每天执行备份脚本
代码如下:
# crontab -l //内容为下
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0
/root/DBFullyBak
.sh >
/dev/null
2>&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6
/root/DBDailyBak
.sh >
/dev/null
2>&1
附录:
sh -n
/root/DBFullyBak
.sh可以用于检测shell语法是否正确