本项目是实现mysql全备和增备脚本,需修改相关参数即可。可指定周期备份。按每周几,镜像全备、增备指定参数即可。
#!/usr/bin/bash
_rootdir=/opt/db/dbbk
_bkdir=bk_`date +%Y%m%d`
_fullbkw=`date +%w`
_fullbkw1=0
_fullbkw2=3
_bkbin=/usr/bin/innobackupex
_mycnf=/etc/my.cnf
_myhost=127.0.0.1
_myuser=root
_mypwd='X123@111'
_myport=3306
_bktmp=/tmp
_bkandsynclog=$_rootdir$_bkdir/mysqldata/bksynclog.md
_tmplog=/tmp/sqllog.log
if [ $_fullbkw -eq $_fullbkw1 ] || [ $_fullbkw -eq $_fullbkw2 ]; then
echo -e "full bk begin!"
sleep 5
if [ -f "$_rootdir/$_bkdir/full/xtrabackup_info" ]; then
echo -e "today full bkup is already exits!"
else
mkdir -p $_rootdir/$_bkdir/{full,incr,log}
_bklog=$_rootdir/$_bkdir/log
$_bkbin --defaults-file=$_mycnf --no-timestamp --host=$_myhost --user=$_myuser --password=$_mypwd --port=$_myport --tmpdir=$_bktmp $_rootdir/$_bkdir/full > $_tmplog 2>&1
_checkbkok=$(tail -n 1 $_tmplog | grep "completed OK" | wc -l)
if [ $? -eq 0 ] && [ $_checkbkok -eq 1 ]; then
echo -e "bk-succeed !"
sleep 5
echo "full-bk-succeed" >> $_tmplog
cat $_tmplog | grep -v prints | grep -E "completed OK|succeed" | xargs | sed 's/ /<-->/g' >> $_bklog/succ.log
else
echo -e "bk-error !"
sleep 5
echo "full-bk-error" >> $_tmplog
cat $_tmplog | grep -v prints | grep -E "full-bk-error" | xargs | sed 's/ /<-->/g' >> $_bklog/error.log
fi
fi
else
echo -e "incr bk begin!"
sleep 5
#拿到最新的全备目录
_lastfulldir=$(ls -lhtr $_rootdir/ | tail -n 1 | awk '{print $9}')
#拿到增备的目录数
_incrnum=$(ls -lhtr $_rootdir/$_lastfulldir/incr | grep -v total | wc -l)
#_incrnum=$(ls -lhtr $_rootdir/$_lastfulldir/incr | grep ^d | wc -l)
if [ $_incrnum -eq 0 ]; then
#说明是第一次增备
echo -e "1 incr"
#mkdir -p $_rootdir/$_lastfulldir/incr/$_bkdir
sleep 2
if [ -f "$_rootdir/$_lastfulldir/incr/$_bkdir/xtrabackup_info" ]; then
echo -e "today incr bkup is already exits!"
else
_bklog=$_rootdir/$_lastfulldir/log
$_bkbin --defaults-file=$_mycnf --no-timestamp --host=$_myhost --user=$_myuser --password=$_mypwd --port=$_myport --incremental $_rootdir/$_lastfulldir/incr/$_bkdir --incremental-basedir=$_rootdir/$_lastfulldir/full > $_tmplog 2>&1
_checkbkok=$(tail -n 1 $_tmplog | grep "completed OK" | wc -l)
if [ $? -eq 0 ] && [ $_checkbkok -eq 1 ]; then
echo -e "bk-succeed !"
sleep 5
echo "incr-bk-succeed" >> $_tmplog
cat $_tmplog | grep -v prints | grep -E "completed OK|succeed" | xargs | sed 's/ /<-->/g' >> $_bklog/succ.log
else
echo -e "bk-error !"
sleep 5
echo "incr-bk-error" >> $_tmplog
cat $_tmplog | grep -v prints | grep -E "incr-bk-error" | xargs | sed 's/ /<-->/g' >> $_bklog/error.log
fi
fi
else
#获取增备最后最后一个目录
_lastincrdir=$(ls -lhtr $_rootdir/$_lastfulldir/incr | tail -n 1 | awk '{print $9}')
sleep 1
#说明不是第一次增备
echo -e "not 1 incr"
#mkdir -p $_rootdir/$_lastfulldir/incr/$_bkdir
sleep 1
echo -e "$_rootdir/$_lastfulldir/incr/$_lastincrdir"
sleep 3
if [ -f "$_rootdir/$_lastfulldir/incr/$_bkdir/xtrabackup_info" ]; then
echo -e "today incr bkup is already exits! is {$_rootdir/$_lastfulldir/incr/$_bkdir}"
else
_bklog=$_rootdir/$_lastfulldir/log
$_bkbin --defaults-file=$_mycnf --no-timestamp --host=$_myhost --user=$_myuser --password=$_mypwd --port=$_myport --incremental $_rootdir/$_lastfulldir/incr/$_bkdir --incremental-basedir=$_rootdir/$_lastfulldir/incr/$_lastincrdir > $_tmplog 2>&1
_checkbkok=$(tail -n 1 $_tmplog | grep "completed OK" | wc -l)
if [ $? -eq 0 ] && [ $_checkbkok -eq 1 ]; then
echo -e "bk-succeed !"
sleep 5
echo "incr-bk-succeed" >> $_tmplog
cat $_tmplog | grep -v prints | grep -E "completed OK|succeed" | xargs | sed 's/ /<-->/g' >> $_bklog/succ.log
else
echo -e "bk-error !"
sleep 5
echo "incr-bk-error" >> $_tmplog
cat $_tmplog | grep -v prints | grep -E "incr-bk-error" | xargs | sed 's/ /<-->/g' >> $_bklog/error.log
fi
fi
fi
fi

