【实用脚本】MySQL备份自动恢复脚本
一、脚本背景
PWC审计有要求对数据库备份文件进行定期还原验证并留痕。使用该脚本对指定实例最新备份文件进行自动恢复并邮件通知
二、脚本内容
#!/bin/bash mysql_instance_dir=/data/mysql_backup/dbapp latest_bak=`ls -t $mysql_instance_dir | awk '$0~/xbstream/' | awk 'NR==1'` restore_log=/tmp/restore_`date +%F`.log start_time=`date +%s` echo > $restore_log echo "------------------------" >> $restore_log echo "|数据库备份每周恢复验证|" >> $restore_log echo "| 即将恢复最新一次备份 |" >> $restore_log echo "------------------------" >> $restore_log echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 1--------------------" >> $restore_log echo "即将恢复最新备份,备份文件: $mysql_instance_dir/$latest_bak `date +%F\ %T`" >> $restore_log sleep 1 echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 2--------------------" >> $restore_log rm -rf /data/restore_mysql/* && echo "备份还原目录已清空 `date +%F\ %T`" >> $restore_log sleep 1 echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 3--------------------" >> $restore_log echo "开始解压备份文件 `date +%F\ %T`" >> $restore_log /usr/local/mysql/bin/lz4_decompress $mysql_instance_dir/$latest_bak /data/restore_mysql/auto_restore_mysql_lz4 echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 4--------------------" >> $restore_log echo "开始解压流备份 `date +%F\ %T`" >> $restore_log xbstream -x < /data/restore_mysql/auto_restore_mysql_lz4 -C /data/restore_mysql/ echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 5--------------------" >> $restore_log if [ $? -eq 0 ];then echo "解压完成,删除lz4文件 `date +%F\ %T`" >> $restore_log rm -rf /data/restore_mysql/auto_restore_mysql_lz4 else echo "备份文件删除失败,脚本退出 `date +%F\ %T`" >> $restore_log exit 1 fi echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 6--------------------" >> $restore_log netstat -ntulp | grep 3333 &> /dev/null if [ $? -eq 0 ];then echo "数据还原实例正在运行,将停止服务 `date +%F\ %T`" >> $restore_log /usr/local/mysql/bin/mysqladmin -udba -pHzdba666#@888 -S /data/mysql3333/mysql.sock shutdown &> /dev/null if [ $? -eq 0 ];then echo "数据还原实例已停止,将继续进行数据恢复 `date +%F\ %T`" >> $restore_log rm -rf /data/mysql3333/* && echo "已清空数据还原实例目录 `date +%F\ %T` " >> $restore_log else echo "数据还原实例停止失败,脚本退出" >> $restore_log fi else echo "数据还原实例未运行,将继续进行数据恢复 `date +%F\ %T`" >> $restore_log rm -rf /data/mysql3333/* && echo "已清空数据还原实例目录 `date +%F\ %T`" >> $restore_log fi echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 7--------------------" >> $restore_log /bin/xtrabackup --defaults-file=/etc/my3333.cnf --prepare --target-dir=/data/restore_mysql/ if [ $? -eq 0 ];then echo "备份文件日志应用完成 `date +%F\ %T`" >> $restore_log else echo "备份文件日志应用失败 `date +%F\ %T`" >> $restore_log fi echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 8--------------------" >> $restore_log /bin/xtrabackup --defaults-file=/etc/my3333.cnf --move-back --target-dir=/data/restore_mysql/ if [ $? -eq 0 ];then echo "备份文件还原完成 `date +%F\ %T`" >> $restore_log else echo "备份文件还原失败 `date +%F\ %T`" >> $restore_log fi echo "" >> $restore_log echo "" >> $restore_log echo "--------------------STEP 9--------------------" >> $restore_log chown -R mysql. /data/mysql3333 /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3333.cnf & sleep 10 netstat -ntulp | grep 3333 &> /dev/null if [ $? -eq 0 ];then echo "备份文件已成功还原,数据还原实例已启动 `date +%F\ %T`" >> $restore_log else echo "数据还原实例启动失败,请检查 `date +%F\ %T`" >> $restore_log fi echo "" >> $restore_log echo "" >> $restore_log end_time=`date +%s` count_time=$[ $end_time - $start_time ] echo "本次恢复耗时:$count_time 秒" >> $restore_log #echo "--------------------STEP 10--------------------" >> $restore_log #echo "已恢复数据库信息如下:" >> $restore_log #/usr/local/mysql/bin/mysql -udba -pHzdba666#@888 -S /data/mysql3333/mysql.sock -e "show databases;" >> $restore_log sleep 3 mail -s "数据库备份文件自动还原 `date +%F`" ops@huize.com lome@huize.com < $restore_log
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论