文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mysql如何实现innobackupex备份脚本

2024-04-02 19:55

关注

这篇文章主要为大家展示了“mysql如何实现innobackupex备份脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql如何实现innobackupex备份脚本”这篇文章吧。

做一个innobackupex的脚本,有全备有增量备份,要求一周一个循环,每周6晚上做全备,周日做以周六的全备为基础的增量备份,周1做以周日的增量备份为基础的增量备份,依次类推。。。注意增量备份可以以增量备份为基础,然后每次做全备的时候,把上一个循环内,也就是最近一周的备份压缩到另一个目录,并且将这个目录的这一周的备份删除。最后存储压缩后的备份的目录需要保留1个月的备份,

开始之前你要明白几点:

1)xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表,但是innobackupex是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份,不支持不是说会报错,你虽然执行的是增量备份,但是关于myisam的相关表是全备份的。

2)使用innobackupex备份的时候,如果没有指定参数--no-timestamp,那么会在你的主备份目录下生成一个时间格式的子目录,如果指定了参数--no-timestamp,那么你指定的备份目录的最后一级,例如:innobackupex --defaults-file=/etc/my.cnf --no-timestamp --user=root --password=123456  --socket=/var/lib/mysql/mysql.sock /backup/mysqldump/back_2017-05-29 ,注意最后一级,也就是back_2017-05-29一定是不存在的,否在报错:innobackupex: Error: Failed to create backup directory /backup/mysqldump/back_2017-05-29: File exists at /usr/bin/innobackupex line 4066

3)注意xtrabackup一般需要自己安装使用,区别于oracle的rman,首先根据自己的操作系统情况下载相应的安装包,直接下载封装好的二进制的.tar文件,然后解压缩即可下载网址如下:

https://www.percona.com/downloads/XtraBackup/LATEST/

不要下载最新的除非你的操作系统比较新

tar zxvf  percona-xtrabackup-2.2.11-Linux-x86_64.tar.gz

yum deplist perl-DBD-MySQL

yum -y install perl-Digest*
yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses-devel zlib-devel 

具体的脚本:

#!/bin/bash
function date2days {
    echo "$*" | awk '{
        z=int((14-$2)/12); y=$1+4800-z; m=$2+12*z-3;
        j=int((153*m+2)/5)+$3+y*365+int(y/4)-int(y/100)+int(y/400)-2472633;
        print j
    }'
}
db_user="root"
db_passwd="123456"
db_defaults_file="/etc/my.cnf"
db_socket="/var/lib/mysql/mysql.sock"
db_backup="/backup/mysqldump/"
db_backup_fulldir="/backup/mysqldump/full/"
db_backup_incrementaldir="/backup/mysqldump/incremental/"
db_backup_gzfull="/backup/mysqldump/gzip/"
db_backup_tarfull="/backup/mysqldump/tar.gzdb/"
rm_num=7
move_and_tar (){
if [ $# != 1 ]; then
       echo "参数不正确"
       exit 0 
fi
time_rm=`date -d "$1 days ago" +"back_%d-%m-%Y"`   
if [ $1 -eq 7 ]; then
        if [ -d ${db_backup_fulldir}${time_rm} ]; then
                tar -czPvf ${db_backup_tarfull}${time_rm}_full.tar.gz ${db_backup_fulldir}${time_rm}
                rm -rf ${db_backup_fulldir}${time_rm}
                echo "压缩目录rm $db_backup_fulldir${time_rm}" >>/backup/mysqldump/config/tar.log
        fi
fi
if [ $1 -gt 0 -a $a -lt 7 ]; then
        if [ -d $db_backup_incrementaldir${time_rm} ]; then
                su - root -c  "tar -czPvf ${db_backup_tarfull}${time_rm}_increment.tar.gz ${db_backup_incrementaldir}${time_rm}"
                su - root -c  "rm -rf ${db_backup_incrementaldir}${time_rm}"
                echo "压缩目录rm $db_backup_incrementaldir${time_rm}" >>/backup/mysqldump/config/tar.log
        fi
fi
}
time="$(date +"back_%d-%m-%Y")"
source /backup/mysqldump/config/config
_Day=$(date2days `echo ${backup_full:5:10}|awk 'BEGIN{FS="-"}{print $3,$2,$1}'`)
Day=$(date2days `date +"%Y %m %d"`)
echo $_Day
echo $Day
let result=$Day-$_Day
echo "相差$result天"
if [ -z ${backup_full} ] || [ $result -ge 7  ] ; then
echo '全备份'
backup_full=${time}
innobackupex --defaults-file=$db_defaults_file --no-timestamp --user=${db_user} --password=${db_passwd}  --socket=$db_socket ${db_backup_fulldir}${backup_full}/
    
if [ $? -eq 0 ]; then
        echo "${time} 备份成功!!!" >> /backup/mysqldump/config/results.log
    else
        echo "${time} 备份失败???" >> /backup/mysqldump/config/results.log
    fi
echo "backup_full=${backup_full}" >/backup/mysqldump/config/config
echo "backup_pre_name=full/${backup_full}" >>/backup/mysqldump/config/config
while [ ${rm_num} -lt 8 -a ${rm_num} -gt 0 ]
do
move_and_tar ${rm_num}
rm_num=`expr ${rm_num} - 1`
done
echo '全备份'
else
echo '增量备份'
innobackupex  --defaults-file=$db_defaults_file --socket=$db_socket --no-timestamp --user=${db_user} --password=${db_passwd}  --incremental ${db_backup_incrementaldir}${time}/ --incremental-basedir=${db_backup}${backup_pre_name}
if [ $? -eq 0 ]; then
                echo "${time} 增量备份成功!!!" >> /backup/mysqldump/config/results.log
        else
                echo "${time} 增量备份失败???" >> /backup/mysqldump/config/results.log
        fi
echo "backup_full=${backup_full}" >/backup/mysqldump/config/config
echo "backup_pre_name=incremental/${time}" >>/backup/mysqldump/config/config
echo '增量备份'
fi

以上是“mysql如何实现innobackupex备份脚本”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯