【实用脚本】使用xtrabackup实现不落地异地备份

Tanglu Shell 2020-06-02 3087 0

脚本说明

通过xtrabackup在从库进行备份,并且将数据库推送到其他服务器存放,数据库在从库服务器本地不会落盘,可以节约磁盘空间

#!/bin/bash
USER=dba
PWD=123456
HOST=10.3.0.243
MYCNF=/etc/my.cnf
PORT=3306
TO_HOST=10.3.0.234
TO_DIR=/data/mysql_backup/tpdb

TAG="mysqlfull"
DATE=$(date +%F)
BASEDIR=/data/dbbak30006
BAKFILE=${TAG}_${DATE}_${PORT}.xbstream
LOGFILE=${TAG}_${DATE}.log

if [ ! -d "/xtrabackup_backupfiles" ];then 
  mkdir /xtrabackup_backupfiles 
fi

#关闭多线程
/usr/local/mysql/bin/mysql -udba -p123456 -S /tmp/mysql30006.sock -e "SET GLOBAL slave_parallel_workers=0;" 
/usr/local/mysql/bin/mysql -udba -p123456 -S /tmp/mysql30006.sock -e "show variables like 'slave_parallel_workers';" &>>$BASEDIR/$LOGFILE 

## backup+compress+scp
echo "开始物理备份 $(date +%F\ %T)" >>$BASEDIR/$LOGFILE
/usr/bin/xtrabackup  --defaults-file=$MYCNF --backup --slave-info --safe-slave-backup --user=$USER --password=$PWD --host=$HOST --port=$PORT --no-timestamp  --stream=xbstream 2>>"$BASEDIR/$LOGFILE" | lz4 -B4 | ssh $TO_HOST -p24 "cat - >$TO_DIR/$BAKFILE"

#备份检查
bak_result=`grep "completed OK" $BASEDIR/$LOGFILE |wc -l`
if [ $bak_result -eq 1 ];then
  echo "实例($HOST:$PORT)备份成功 $(date +%F\ %T)" | mail -s "实例($HOST:$PORT)备份成功 $(date +%F\ %T)" ops@huize.com,lome@huize.com
else
  echo "实例($HOST:$PORT)备份失败 $(date +%F\ %T)" | mail -s "实例($HOST:$PORT)备份失败 $(date +%F\ %T)" ops@huize.com,lome@huize.com
fi

#开启多线程
/usr/local/mysql/bin/mysql -udba -p123456 -S /tmp/mysql30006.sock -e "SET GLOBAL slave_parallel_workers=8";
/usr/local/mysql/bin/mysql -udba -p123456 -S /tmp/mysql30006.sock -e "show variables like 'slave_parallel_workers';" &>>$BASEDIR/$LOGFILE

scp -P24 $BASEDIR/$LOGFILE $TO_HOST:$TO_DIR/


评论