【实用脚本】数据库备份巡检自动还原脚本
脚本作用
公司有多个网络环境、数十个实例,每个实例每天都会有备份任务(Xtrabackup物理备份),该脚本可以根据用户输入的信息去寻找对应环境下最新的备份文件然后自动启动实例进行还原,可以节约人工还原的时间
#!/bin/bash while true do read -p "请输入需要还原的数据库备份环境[pre|dev|test]": MYSQL_ENV if [ $MYSQL_ENV != 'pre' ] && [ $MYSQL_ENV != 'dev' ] && [ $MYSQL_ENV != 'test' ] ;then echo "请输入正确的备份环境" continue fi array=`ls /data/backup/mysql_backup_from_${MYSQL_ENV}` echo "该环境下存在以下数据库实例:${array[*]}" read -p "请输入需要还原的实例简称,如[public|qixin|wp]": MYSQL_INSTANCE mysql_instance_dir=/data/backup/mysql_backup_from_${MYSQL_ENV}/${MYSQL_INSTANCE} echo "需要还原的数据库实例:${MYSQL_ENV}环境 ${MYSQL_INSTANCE}实例" sleep 1 if [ `ls -t $mysql_instance_dir 2>/dev/null | awk '$0~/xbstream/' | wc -l 2>/dev/null` -eq 0 ];then echo "该目录不存在备份文件,请重新输入" else latest_bak=`ls -t $mysql_instance_dir | awk '$0~/xbstream/' | awk 'NR==1'` echo "需要还原的数据库备份文件:${latest_bak}" sleep 1 break fi done start_time=`date +%s` cat << EOF ------------------------ | 数据库备份还原测试 | | 即将恢复最新1次备份 | ------------------------ EOF sleep 1 echo "" echo "" echo "STEP 1-------------------->" echo "`date +%F\ %T`: 即将对${MYSQL_ENV}环境 ${MYSQL_INSTANCE}实例进行还原测试,备份集 ${latest_bak}" sleep 1 echo "" echo "" echo "STEP 2-------------------->" rm -rf /data/restore_mysql/* && echo "`date +%F\ %T` : 清空备份还原目录" sleep 1 echo "" echo "" echo "STEP 3-------------------->" echo "`date +%F\ %T`: 开始解压备份文件" /usr/local/mysql/bin/lz4_decompress $mysql_instance_dir/$latest_bak /data/restore_mysql/auto_restore_mysql_lz4 echo "" echo "" echo "STEP 4-------------------->" echo "`date +%F\ %T`: 开始解压流备份" xbstream -x < /data/restore_mysql/auto_restore_mysql_lz4 -C /data/restore_mysql/ if [ $? -eq 0 ];then echo "`date +%F\ %T`: 解压完成,删除lz4文件" rm -rf /data/restore_mysql/auto_restore_mysql_lz4 else echo "`date +%F\ %T`: 备份文件删除失败,脚本退出" exit 1 fi echo "" echo "" echo "STEP 5-------------------->" netstat -ntulp | grep 3333 &> /dev/null if [ $? -eq 0 ];then echo "`date +%F\ %T`: 数据还原实例正在运行,将停止服务" /usr/local/mysql/bin/mysqladmin -udba -pHzdba666#@888 -S /tmp/mysql3333.sock shutdown &> /dev/null if [ $? -eq 0 ];then echo "`date +%F\ %T`: 数据还原实例已停止,将继续进行数据恢复" rm -rf /data/mysql3333/data/* && echo "`date +%F\ %T`: 已清空数据还原实例目录" else echo "数据还原实例停止失败" exit 1 fi else echo "`date +%F\ %T`: 数据还原实例未运行,将继续进行数据恢复" rm -rf /data/mysql3333/data/* && echo "`date +%F\ %T`: 已清空数据还原实例目录" fi echo "" echo "" echo "STEP 6-------------------->" /bin/xtrabackup --defaults-file=/etc/my3333.cnf --prepare --target-dir=/data/restore_mysql/ if [ $? -eq 0 ];then echo "`date +%F\ %T`: 备份文件日志应用完成" else echo "`date +%F\ %T`: 备份文件日志应用失败" exit 1 fi echo "" echo "" echo "STEP 7-------------------->" /bin/xtrabackup --defaults-file=/etc/my3333.cnf --move-back --target-dir=/data/restore_mysql/ if [ $? -eq 0 ];then echo "`date +%F\ %T`: 备份文件还原完成" else echo "`date +%F\ %T`: 备份文件还原失败" exit 1 fi echo "" echo "" echo "STEP 8-------------------->" if [ -d /data/mysql3333/log ];then mkdir -p mkdir /data/mysql3333/{log,data,tmp} && touch /data/mysql3333/log/error.log && mkdir /data/mysql3333/log/{slowlog,binlog,relaylog} -p chown -R mysql. /data/mysql3333 fi /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3333.cnf & sleep 300 netstat -ntulp | grep 3333 &> /dev/null if [ $? -eq 0 ];then echo "`date +%F\ %T`: 备份文件已成功还原,数据还原实例已启动" else echo "`date +%F\ %T`: 数据还原实例启动失败,请检查" exit 1 fi echo "" echo "" end_time=`date +%s` count_time=$[ $end_time - $start_time ] echo "本次恢复耗时:$count_time 秒" sleep 10
版权声明:本文章版权归数据库运维网(www.ywdba.cn)所有。如需引用本站内容,请注明来源及作者。
评论