共计 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 行业资讯频道!