mysql如何实现innobackupex备份脚本

52次阅读
没有评论

共计 3929 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章主要为大家展示了“mysql 如何实现 innobackupex 备份脚本”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“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 备份脚本”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计3929字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)