使用新版Xtrabackup2.4.12定时备份mysql/percona到远程备份服务器

15 篇文章 0 订阅
3 篇文章 0 订阅

Xtrabackup怎么安装参考
废话少说
版本1: --stream=tar 先备份都本机在远程拷贝

#!/bin/bash 

#数据库用户名
dbuser='backup'
#数据库用密码
dbpasswd='123456'
#hosts
dbhost='127.0.0.1'
#日志备份路径
logpath='/home/xtrabackup'
#数据备份路径
datapath='/home/xtrabackup'
# 用流备份,默认的临时目录都是系统的/tmp目录,需要保证该目录有足够的空间,或指定--tmpdir选项
tmpdir='/home/xtrabackuptmp'
#远程机器目标位置
remoteDir='/home/55data/'

backtime=`date +%Y%m%d%H%M%S`
echo "-------${backtime},${host}备份数据库开始-------------" >> ${logpath}/log.log

xtrabackup --host=${dbhost} --user=${dbuser} --password=${dbpasswd} --backup --stream=tar --ftwrl-wait-timeout=10  --datadir=/var/lib/mysql  --tmpdir=${tmpdir} | pigz -9 -p 4 >${datapath}/${backtime}.tgz

endtime=`date +%Y%m%d%H%M%S`
if [ "$?" == 0 ];then
echo "${endtime},${host}数据库备份完成" >> ${logpath}/log.log
else
#备份失败则进行以下操作
echo "${endtime},${host}数据库备份失败!!" >> ${logpath}/log.log
fi
echo "${endtime},${host}备份数据库结束" >> ${logpath}/log.log

#将压缩文件传输到远程服务器
scp ${datapath}/${backtime}.tgz root@192.168.1.1:${remoteDir}

filesize=`ls -l ${datapath}/${backtime}.tgz | awk '{ print $5/1024/1024 }'`  
echo "备份文件名:${datapath}/${backtime}.tgz,备份文件大小:${filesize}M" >> ${logpath}/log.log

#定时删除
mvtime=`date +%Y%m%d%H%M%S`
#创建文件路径
mkdir /home/rmmysqldata/${mvtime}

#从备份文件中移动过期文件到"回收站"
find /home/xtrabackup/ -type f -name "*.tgz" -mtime +1 -exec mv {} /home/rmmysqldata/${mvtime}/ \; > /dev/null 2>&1

#到回收站的目录下删除过期文件
rm -rf /home/rmmysqldata/${mvtime}

if [ "$?" == 0 ];then
cleartime=`date +%Y%m%d%H%M%S`
echo "${cleartime},历史数据清理结束" >> ${logpath}/log.log
else
#备份失败则进行以下操作
echo "${cleartime},历史数据清理失败" >> ${logpath}/log.log

fi


#判断备份文件夹大小
datafilesize=`du -s -h ${datapath}`  
echo "${datapath}文件大小:${datafilesize}" >> ${logpath}/log.log

#循环判断分区使用率是否超过80%
percent=`df -k | grep -v Filesystem| awk '{print int($5)}'`
 
for each_one in $percent
do
        #判断使用率是否超过90%
        if [ $each_one -ge 80 ];then
                #如果超过80 则把使用情况
                echo "磁盘使用:${each_one}" >> ${logpath}/log.log
        fi
done

好处:前期不依赖网络 本机备份成功率更高,这里用到pigz 这个压缩工具比较快 但是也很消耗资源 大家可以根据实际情况考虑是否要使用

版本2: --stream=xbstream 直接备份到远程机器(配置好ssh)

#!/bin/bash 

#数据库用户名
dbuser='backup'
#数据库用密码
dbpasswd='123456'
#hosts
dbhost='127.0.0.1'
#日志备份路径
logpath='/home/xtrabackup'
#数据备份路径
datapath='/home/xtrabackup'
# 用流备份,默认的临时目录都是系统的/tmp目录,需要保证该目录有足够的空间,或指定--tmpdir选项
tmpdir='/home/xtrabackuptmp'
#远程机器目标位置
remoteDir='/home/55data/'
#远程机器目标位置
remoteIp='192.168.11.1'
#远程机器账户
remoteUser='root'

xtrabackuplogpath='/home/xtrabackuplog1.log'

backtime=`date +%Y%m%d%H%M%S`
echo "--${backtime},${host}备份数据库开始--" >> ${logpath}/xtrabackuplog.log

echo "--${backtime},${host}备份数据库开始--" >> ${xtrabackuplogpath}

#远程创建文件夹
ssh ${remoteUser}@${remoteIp} "mkdir ${remoteDir}/${backtime}"

#远程备份
xtrabackup --host=${dbhost} --user=${dbuser} --password=${dbpasswd} --backup --ftwrl-wait-timeout=10 --tmpdir=${tmpdir}  --compress  --compress-threads=4 --stream=xbstream --parallel=4  | ssh ${remoteUser}@${remoteIp} "xbstream -x -C ${remoteDir}/${backtime}"

endtime=`date +%Y%m%d%H%M%S`

lastStr=$(tail -n -1 ${xtrabackuplogpath})

successStr='completed OK'

result=$(echo $lastStr | grep "${successStr}")
if [[ "$result" != "" ]]
then
  echo "--${endtime},${host}数据库备份完成--" >> ${logpath}/xtrabackuplog.log
else
  echo "--${endtime},${host}数据库备份失败!!--" >> ${logpath}/xtrabackuplog.log
fi
echo "--${endtime},${host}备份数据库结束--" >> ${logpath}/xtrabackuplog.log


好处: 使用流式压缩可以直接不占用本地空间 直接传输到远程机器我这里是先本地备份在传输 是为了加快备份 本地磁盘空间也够用

版本三 备份 --stream=xbstream 并使用zip压缩 删除备份原始文件

#!/bin/bash 

#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='123456'
#hosts
dbhost='10.2.3.5'
#日志备份路径
logpath='/home/xtrabackup'
#日志记录头部
tmpdir='/home/xtrabackuptmp'
#远程机器目标位置
remoteDir='/data/mysqlback'
#远程机器目标位置
remoteIp='1.1.12.1'
#远程机器账户
remoteUser='root'

xtrabackuplogpath='/home/xtrabackup/xtrabackuplog1.log'

backtime=`date +%Y%m%d%H%M%S`

dirName=${dbhost}${backtime}


echo "--${backtime},${dbhost}备份数据库开始--" >> ${logpath}/xtrabackuplog.log
mysql -h${remoteIp} -P3306 -u${dbuser} -p${dbpasswd} backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('xtrabackup备份开始','${dbhost}')"

echo "--${backtime},${dbhost}备份数据库开始--" >> ${xtrabackuplogpath}

#远程创建文件夹
ssh ${remoteUser}@${remoteIp} "mkdir ${remoteDir}/${dirName}"

#远程备份
xtrabackup --host=${dbhost} --user=${dbuser} --password=${dbpasswd} --backup --no-timestamp --ftwrl-wait-timeout=10 --tmpdir=${tmpdir}  --compress  --compress-threads=8 --stream=xbstream --parallel=8  | ssh ${remoteUser}@${remoteIp} "xbstream -x -C ${remoteDir}/${dirName}"

endtime=`date +%Y%m%d%H%M%S`

lastStr=$(tail -n -1 ${xtrabackuplogpath})

successStr='completed OK'

result=$(echo $lastStr | grep "${successStr}")
if [[ "$result" != "" ]]
then
  echo "--${endtime},${dbhost}数据库备份完成--" >> ${logpath}/xtrabackuplog.log
  mysql -h${remoteIp} -P3306 -u${dbuser} -p${dbpasswd} backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('1xtrabackup备份完成','${dbhost}')"
else
  echo "--${endtime},${dbhost}数据库备份失败!!--" >> ${logpath}/xtrabackuplog.log
   mysql -h${remoteIp} -P3306 -u${dbuser} -p${dbpasswd} backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('2xtrabackup备份失败','${dbhost}')"
fi
echo "--${endtime},${dbhost}备份数据库结束--" >> ${logpath}/xtrabackuplog.log
mysql -h${remoteIp} -P3306 -u${dbuser} -p${dbpasswd} backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('${dbhost}数据库备份失败','${dbhost}')"

echo "--`date +%Y%m%d%H%M%S`,${dbhost}开始压缩文件--" >> ${logpath}/xtrabackuplog.log
mysql -h${remoteIp} -P3306 -u${dbuser} -p${dbpasswd} backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('${dbhost}开始压缩文件','${dbhost}')"

ssh ${remoteUser}@${remoteIp} "cd ${remoteDir};zip -rmq ${dirName}.zip ${dirName}/"

echo "--`date +%Y%m%d%H%M%S`,${dbhost}压缩完成:${remoteDir}/${dirName}-- " >> ${logpath}/xtrabackuplog.log
mysql -h${remoteIp} -P3306 -u${dbuser} -p${dbpasswd} backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('${dbhost}压缩完成:${remoteDir}/${dirName}','${dbhost}')"

好处: 使用流式压缩可以直接不占用本地空间 直接传输到远程机器我这里是先本地备份在传输 是为了加快备份 本地磁盘空间也够用 对备份文件再次压缩能进一步节省备份机器空间 并且方便后续删除脚本操作文件(查找过期文件对文件夹操作比文件复杂得多 脚本容易出错)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值