xtrabackup备份和恢复数据脚本
该脚本用于备份和恢复MySQL数据库。
总结xtrabackup备份的两个坑:
1、在恢复数据的过程中,如果中途出错,则数据将会被破坏,后续很难再恢复。
2、在恢复过程中,如果版本过低,在准备全量数据的时候会卡在等待那里,无法进行下一步。
如我用xtrabackup2.4.4 备份的,用2.4.5恢复就会卡在前面那里。听说这是个bug。后来改成了2.4.13的时候时间会快很多。
#!/bin/bash #author: chentufeng #create time: 2019 05 07 #mail:15219234405@139.com #version: 1.0 incre_time=`date +%Y%m%d` current_month=`date +%Y%m` full_amount_day=`date +%d` three_month_ago=`date -d "-3 month" +%Y%m` #mysql配置文件 mysql_cfg="/etc/my.cnf" #定义备份目录,就算不创建,备份的时候也会自动创建 mysql_bak="/data/mysql/mysql_bak" bak_month_dir="${mysql_bak}/${current_month}" #定义mysql登录信息 mysql_pwd="123456" mysql_user="root" #全量备份目录 full_amount_dir="${mysql_bak}/${current_month}/full_amount" #增量备份目录 incre_dir="${mysql_bak}/${current_month}/incre${incre_time}" #判断目录是否存在,不存在则创建 [ ! -d ${bak_month_dir} ] && mkdir -p ${mysql_bak}/${current_month} #每月1号进行全量备份 if [ ${full_amount_day} -eq 01 ];then innobackupex --defaults-file=${mysql_cfg} --user="${mysql_user}" --password=${mysql_pwd} --parallel=8 --slave-info --no-timestamp ${full_amount_dir} if [ $? -eq 0 ];then echo "Full amount backup sucessful!" #删除三个月前的备份文件 rm -rf ${mysql_bak}/${three_month_ago} else echo "Full amount backup failure!!!!!!!!!!!" fi #因数据量不算大,每天在月初全备的基础上做增量备份,若有问题只需要恢复一次 else innobackupex --defaults-file=${mysql_cfg} --user="${mysql_user}" --password=${mysql_pwd} --no-timestamp --incremental-basedir=${full_amount_dir} --incremental ${incre_dir} [ $? -eq 0 ] && echo "Incremental backup sucessful!" || echo "Incremental backup failure!!!!!!!!!!!" fi :<<wendang 【数据恢复说明】 数据恢复步骤:(注意:步骤只适合该备份脚本的恢复) 1、创建data目录,根据my.cnf配置来创 2、prepare(准备): 1)全量备份准备 #innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only 全量备份目录(full_amount_dir) # 指定全备目录,--redo-only 对已提交的事务进行前滚,仅最后一次全量恢复不需要添加该参数 2)恢复增量备份数据准备(注意:必须指定全量备份的目录,否则只能恢复全量备份的数据) #innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only 全量备份目录 --incremental-dir=最后一次增量备份目录(incre_dir) # --incremental-dir 指定最后一次增备目录 ( 绝对路径 ) 3、再次prepare(准备)全量备份 # innobackupex --defaults-file=/etc/my.cnf --apply-log 全量备份目录(full_amount_dir) #注意:不需要加--redo-only参数 4、最后一步,复制整合后的全备文件,位置为 my.cnf 中 datadir 指定路径 #innobackupex --defaults-file=/etc/my.cnf --copy-back 全量备份目录(full_amount_dir) 5、给data目录赋予mysql权限: #chown -R mysql.mysql /var/lib/mysql(查看my.cnf确定data目录路劲) 6、启动mysql #/etc/init.d/mysql.server start wendang