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