此脚本需要与我前几天写的备份脚本配套才能使用

这里也对innobackupex吐槽下,当使用innobackupex进行恢复的时候,必须要清除所有原数据文件,但是一旦恢复失败,则连实例都将丢失,不成功,则成仁。所以使用innobackupex恢复的时候一定要慎重,最好对数据文件做个冷备。

#!/bin/bash
# 定义变量
user_name=root
password="123456"
socket="/mysqldb/home/mysql.sock"
file_cnf=/mysqldb/config/my.cnf BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"`
format_time=`date +"%Y-%m-%d_%H:%M:%S"`
time=`date +"%Y-%m-%d"`
time_1=$( date +"%Y-%m-%d" -d "-24hour" )
time_2=`date +%Y-%m-%d -d "-48hour"`
backupbin=/usr/bin backdir=/mysql_backup/$time
old_dir=/mysql_backup/$time_1
redo=/mysql_backup/redofile
log=/mysql_backup/info/recover_log_$time #innobackupex输出信息日志 if [ ! -d "$log" ];then
touch /mysql_backup/info/recover_log_$time
break;
fi #我的备份定在当日凌晨开始。如果选择当日夜间,恢复的脚本需要重新规划。
#判断备份的形式
if [ -d "$backdir"_incr2 ];then
(echo "#####开始二次增量恢复 `date`") && >>$log; #关闭数据库(已经将控制命令加入系统启动项)。
systemctl stop mysqld;
sleep 5; #解压出数据文件
tar -xvf "$redo"/*_"$time_2"_* -C "$redo"/ >/dev/null 2>&1;
sleep 2;
tar -xvf "$redo"/*_"$time_1"_* -C "$redo"/ >/dev/null 2>&1;
sleep 2; #prepare redo log
(echo "#####准备全量日志 `date`") && >>$log;
( innobackupex --apply-log --redo-only "$redo"/mysql_backup/"$time_2"_full 1>/dev/null 2>>$log; ) && ( sleep 3; ) && ( echo "#####准备一次增量日志 `date` " && >>$log ); (innobackupex --apply-log --redo-only "$redo"/mysql_backup/"$time_2"_full --incremental-dir="$redo"/mysql_backup/"$time_1"_incr1 1>/dev/null 2>>$log ) && (sleep 3 ) && ( echo "#####准备二次增量日志 `date`" && >>$log); (innobackupex --apply-log --redo-only "$redo"/mysql_backup/"$time_2"_full --incremental-dir="$backdir"_incr2 1>/dev/null 2>>$log ) && (sleep 3) && (echo "#####重做日志一致性准备完毕 `date` " && >>$log); sleep 2; #删除数据库原始data
rm -rf /mysqldb/data/*;
sleep 2; #copy
(echo "#####开始重做 $format_time") && >>$log;
(innobackupex --user=$user_name --password=$password --copy-back --datadir=/mysqldb/data/ "$redo"/mysql_backup/"$time_2"_* 1>/dev/null 2>>$log ) && (echo "#####恢复动作完毕 $format_time" && >>$log); #授权
chown -R mysql:mysql /mysqldb/data/ ; #清理过程文件
rm -rf "$redo"/mysql_backup ; #重启数据库
systemctl start mysqld;
sleep 8;#根据服务器性能设定,新能高,就设定短些
break; elif [ -d "$backdir"_incr1 ];then
(echo "#####开始一次增量恢复 $format_time" ) && >>$log; systemctl stop mysqld;
sleep 5; tar -xvf "$redo"/*_"$time_1"_* -C "$redo"/ >/dev/null 2>&1;
sleep 2; (echo "#####准备全量日志 $format_time" ) && >>$log;
( innobackupex --apply-log --redo-only "$redo"/mysql_backup/"$time_1"_full 1>/dev/null 2>>$log; ) && ( sleep 3; ) && ( echo "#####准备一次增>量日志 $format_time" && >>$log );
sleep 1; (innobackupex --apply-log --redo-only "$redo"/mysql_backup/"$time_1"_full --incremental-dir="$backdir"_incr1 1>/dev/null 2>>$log ) && (sleep 3) && (echo "#####重做日志一致性准备完毕 $format_time " && >>$log);
sleep 1; rm -rf /mysqldb/data/*;
sleep 1; (echo "#####开始重做 $format_time" ) && >>$log;
(innobackupex --user=$user_name --password=$password --copy-back --datadir=/mysqldb/data/ "$redo"/mysql_backup/"$time_1"_* 1>/dev/null 2>>$log ) && (echo "#####恢复动作完毕 $format_time" && >>$log);
sleep 1; chown -R mysql:mysql /mysqldb/data/ ; rm -rf "$redo"/mysql_backup ; systemctl start mysqld;
sleep 8;
break; elif [ -d "$backdir"_full ];then
(echo "#####开始全量恢复 $format_time" ) && >>$log; systemctl stop mysqld;
sleep 5; (echo "#####准备全量日志 $format_time" ) && >>$log;
( innobackupex --apply-log --redo-only "$backdir"_full 1>/dev/null 2>>$log; ) && ( sleep 3; )
sleep 1; rm -rf /mysqldb/data/*;
sleep 1; (echo "#####开始重做 $format_time") && >>$log;
(innobackupex --user=$user_name --password=$password --copy-back --datadir=/mysqldb/data/ "$backdir"_full 1>/dev/null 2>>$log ) && (echo "#####恢复动作完毕 $format_time" >>$log);
sleep 1; chown -R mysql:mysql /mysqldb/data/ ;
sleep 3;
rm -rf "$redo"/mysql_backup ;
systemctl start mysqld;
sleep 6;
break;
fi ENDTIME=`date +"%Y-%m-%d %H:%M:%S"`
begin_data=`date -d "$BEGINTIME" +%s`
end_data=`date -d "$ENDTIME" +%s`
spendtime=`expr $end_data - $begin_data`
(echo "用时 $spendtime $format_time ") && >>$log mysql -u$user_name -p$password -e "show databases" ; if [ $? -ne 0 ]; then
(echo "#####恢复失败 `date` ") && >>$log
else
(echo "#####恢复成功 `date` ") && >>$log
fi

innobackupex 恢复脚本的更多相关文章

  1. Mongodb之备份恢复脚本

    本分脚本: !/bin/bash #备份文件执行路径 which mongodump DUMP= #临时备份目录 OUT_DIR= #本分存放目录 TAR_DIR= #获取当前系统时间==> 2 ...

  2. MySQL的恢复脚本

    原文转自: http://blog.csdn.net/dbanote/article/details/13295727 应用场景: ********************************** ...

  3. MySQL XtraBackup自动恢复脚本

      #!/bin/sh ################## #author:rrhelei@126.com# ################## #xtrabackup2.1.8 # 使用方法: ...

  4. innobackupex 恢复实验

    [root@localhost backup]# pwd /backup [root@localhost backup]# ll 总用量 drwxr root root Jul : basebacku ...

  5. innobackupex 单脚本循环7天一全备6增备脚本更新

    #!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=-$)/); y=$+-z; m=$+*z-; j=*m ...

  6. innobackupex备份脚本

    #!/bin/bash # 10 23 * * * /bin/bash /data/script/backup.sh BDATE=`date +%Y%m%d%H%M%S`BPATH=/data/bac ...

  7. mongo数据备份及恢复脚本

    #!/bin/bashtime="$(date +"%Y.%m.%d")" id=`echo "show dbs;"|/usr/local/ ...

  8. 『BASH』——文件权限批量恢复脚本——「Permission Revovery」

    一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...

  9. Confluence 6 用户提交的备份和恢复脚本

    下面的代码是用户提交的,在使用的时候需要小心,因为 Atlassian 不提供这些代码的技术支持.如果你在使用或者修改这些代码的时候有任何问题,请粘贴到 post them to Atlassian ...

随机推荐

  1. JSON 文件的存取

    import json data = {'Tom': {'Weight:': 65, 'Score': 90, 'Height': 170}} # json.dumps 将字典转化为 JSON 编码的 ...

  2. kotlin + springboot整合mybatis操作mysql数据库及单元测试

    项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...

  3. 洛谷$P4768\ [NOI2018]$归程 $kruscal$重构树

    正解:$kruscal$重构树 解题报告: 传送门$QwQ$ 语文不好选手没有人权$TT$连题目都看不懂真的要哭了$kk$ 所以先放个题目大意?就说给定一个$n$个点,$m$条边的图,每条边有长度和海 ...

  4. 用本地自定义域名访问远程服务器,并支持websocket和cookie

    场景 在公司会有很多测试的机器,或者一些OA服务,Confluence,Jenkins,各种中间件的后台等等,都使用HTTP访问,且由于是内网机器没有域名,输入IP又要输入不同端口,访问起来比较麻烦. ...

  5. HDU2089 不要62 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目大意:求区间 \([l,r]\) 范围内不包含数字"4"且不包含连续的数 ...

  6. Linux开发环境及应用—《第三周单元测验》《第四周单元测验》

    三单元 1.vi处于文本输入状态时,按下下列哪个按键可以返回命令状态?C A.^ B.$ C.Esc D- 2.vi处于命令状态时,按下下列哪组按键可以把正在编辑的内容保存到磁盘上?D A.Ctrl- ...

  7. Java 多线程与并发(六):AQS

    我们前面几张提到过,JUC 这个包里面的工具类的底层就是使用 CAS 和 volatile 来保证线程安全的,整个 JUC 包里面的类都是基于它们构建的.今天我们介绍一个非常重要的同步器,这个类是 J ...

  8. vmware workstation12在安装VMware tools时出现问题:A previous installation of VMware Tools has been detected 解决

    win10安装的vmware workstation12在安装VMware tools时出现问题: root@lc:/root/vmware-tools-distrib# ./vmware-insta ...

  9. 初始 Kafka Consumer 消费者

    温馨提示:整个 Kafka 专栏基于 kafka-2.2.1 版本. 1.KafkaConsumer 概述 根据 KafkaConsumer 类上的注释上来看 KafkaConsumer 具有如下特征 ...

  10. C#调用Matlab生成的Dll

    问题描述:最近开发需要调用matlab生成的DLL,在New MWNumericArray 对象的时候报错,提示未将对象引用到对象的实例. 问题分析:因为MWArray.dll是Matlab提供的DL ...