概述:现有mysql主从结构,版本为mysql5.7 ,由于需要增加定期进行备份,但数据量原因,使用mysqldump速度太慢,比较费时间,故选用xtrabackup在从库上做物理全量备份【后期增加增量】和备份到目标备份服务器,备份速度快,还可增量,此演示中是全量备份脚本,下面是环境结构:
从库 -- 》 定时备份 《 == 》目标备份服务器拉取备份,完成后删除源备份 【ssh到从库服务器免密】
直接上初版备份脚本:
【从库服务器】:
#!/usr/bin/bash
_rootdir=/data/dbbk/autobk/
_bkdir=bk_`date +%Y%m%d`
_bkbin=/usr/bin/innobackupex
_mycnf=/etc/my.cnf
_myhost=127.0.0.1
_myuser=root
_mypwd='pwd123456'
_myport=3306
_bktmp=/tmp
_bkandsynclog=$_rootdir$_bkdir/mysqldata/bksynclog.md
if [ ! -d $_rootdir$_bkdir ]; then
echo -e "$_bkdir no found ! be create !" >> $_bkandsynclog
mkdir -p $_rootdir$_bkdir
sleep 1
$_bkbin --defaults-file=$_mycnf --no-timestamp --host=$_myhost --user=$_myuser --password=$_mypwd --port=$_myport --tmpdir=$
_bktmp $_rootdir$_bkdir
if [ $? -eq 0 ] ; then
_bknum=`find $_rootdir$_bkdir -type -f | wc -l`
echo -e "备份已完成..!" >> $_bkandsynclog
echo -e "$_bknum" > $_rootdir$_bkdir/mysqldata/bknum.md
else
echo -e "备份失败,请检查!" >> $_bkandsynclog
fi
else
echo -e "$_bkdir found !" >> $_bkandsynclog
$_bkbin --defaults-file=$_mycnf --no-timestamp --host=$_myhost --user=$_myuser --password=$_mypwd --port=$_myport --tmpdir=$
_bktmp $_rootdir$_bkdir
if [ $? -eq 0 ] ; then
_bknum=`find $_rootdir$_bkdir -type -f | wc -l`
echo -e "备份已完成..!" >> $_bkandsynclog
echo -e "$_bknum" > $_rootdir$_bkdir/mysqldata/bknum.md
else
echo -e "备份失败,请检查!" >> $_bkandsynclog
fi
fi
【目标备份服务器】:
#!/usr/bin/bash
_rootdir=/prod_dbbackup/dbbk/
_bkdir=bk_`date +%Y%m%d`
_syncbin=/usr/bin/rsync
_fromhost=172.31.84.236
_fromuser=root
_fromdir=/data/dbbk/autobk/$_bkdir/
_bkandsynclog=$_rootdir$_bkdir/mysqldata/bksynclog.md
if [ ! -d $_rootdir$_bkdir ]; then
echo -e "$_bkdir no found ! be create !" >> $_bkandsynclog
mkdir -p $_rootdir$_bkdir
sleep 1
$_syncbin -rvz --delete -e 'ssh -p 22 -i /root/.ssh/id_rsa' $_fromuser@$_fromhost:$_fromdir $_rootdir$_bkdir/
if [ $? -eq 0 ] ; then
_syncnum=`find $_rootdir$_bkdir -type -f | wc -l`
echo -e "同步已完成..!" >> $_bkandsynclog
echo -e "$_syncnum" > $_rootdir$_bkdir/mysqldata/syncnum.md
sleep 3
_bkchar=`cat $_rootdir$_bkdir/mysqldata/bknum.md`
_syncchar=`cat $_rootdir$_bkdir/mysqldata/syncnum.md`
_emptydir=/prod_dbbackup/dbbk/emptydir/
if [ "$_bkchar" == "$_syncchar" ]; then
echo -e "sync true is all !" >> $_bkandsynclog
sleep 1
$_syncbin -rvz --delete -e 'ssh -p 22 -i /root/.ssh/id_rsa' $_emptydir $_fromuser@$_fromhost:$_fromdir
else
echo -e "sync false!" >> $_bkandsynclog
fi
else
echo -e "同步失败,请检查!" >> $_bkandsynclog
fi
else
echo -e "$_bkdir found !" >> $_bkandsynclog
$_syncbin -rvz --delete -e 'ssh -p 22 -i /root/.ssh/id_rsa' $_fromuser@$_fromhost:$_fromdir $_rootdir$_bkdir/
if [ $? -eq 0 ] ; then
_syncnum=`find $_rootdir$_bkdir -type -f | wc -l`
echo -e "同步已完成..!" >> $_bkandsynclog
echo -e "$_syncnum" > $_rootdir$_bkdir/mysqldata/syncnum.md
sleep 3
_bkchar=`cat $_rootdir$_bkdir/mysqldata/bknum.md`
_syncchar=`cat $_rootdir$_bkdir/mysqldata/syncnum.md`
_emptydir=/prod_dbbackup/dbbk/emptydir/
if [ "$_bkchar" == "$_syncchar" ]; then
echo -e "sync true is all !" >> $_bkandsynclog
sleep 1
$_syncbin -rvz --delete -e 'ssh -p 22 -i /root/.ssh/id_rsa' $_emptydir $_fromuser@$_fromhost:$_fromdir
else
echo -e "sync false!" >> $_bkandsynclog
fi
else
echo -e "同步失败,请检查!" >> $_bkandsynclog
fi
fi
总结: 以上只是初版备份脚本,需要改进的地方还很多,在实际过程中将搭配增量备份同时进行,避免备份、恢复时间过长的问题。

