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

这里也对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. 1037 在霍格沃茨找零钱 (20 分)C语言

    题目描述 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 -- 就如海格告诉哈利的:"十七个银西可(Sickle)兑一个加隆(Galleon),二 十九个纳特(Knut)兑一个西可 ...

  2. 使用Theia——创建插件

    上一篇:使用Theia——创建扩展包 创建Theia插件 下面我们来看看如何创建Theia插件.作为示例,我们将注册一个Hello World命令,该命令显示一个“Hello World”通知.本文将 ...

  3. es6种for循环中let和var区别

    let和var区别: for(var i=0;i<5;i++){ setTimeout(()=>{ console.log(i);//5个5 },100) } console.log(i) ...

  4. Spring 加定时器

    定时器功能我们一般不常用, 但是一旦用到,那也是非常重要的, 今天我们就讲一下如何简单快速的使用定时器 第一种方法, 使用注解的方式完成定时器 1.在spring-servlet.xml文件中加入ta ...

  5. Netty快速入门(05)Java NIO 介绍-Selector

    Java NIO Selector Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读.可写.如此可以实现单线程管理多个channels,也就是 ...

  6. APICloud开发者进阶之路 | UIPickerView 模块示例demo

    本文出自APICloud官方论坛 rongCloud2  3.2.8 版本更新后添加了发送小视频接口,发送文件接口. rongCloud2  概述 融云是国内首家专业的即时通讯云服务提供商,专注为互联 ...

  7. P3802 小魔女帕琪 概率与期望

    P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...

  8. 第一篇:python中的判断语句和循环

    python与C语言的代码格式区别: 需注意:1.python中语句结束没有分号 “;” 2.python中严格要求缩进,且在判断和循环等语句中把括号用冒号代替. 3.经常使用tab键进行缩进. 4. ...

  9. 【C_Language】---最全面的C指针总结,初级程序员必备

    好久没写博客了,重新学习C语言了的基础课程,发现很多东西都忘记的差不多了,闲来无事,总结一下关于指针的知识,希望能帮到像我一样的菜鸟们: 指针,众所周知是C语言的精华所在,不懂指针的话,你就不要说你学 ...

  10. LGV - 求多条不相交路径的方案数

    推荐博客 :https://blog.csdn.net/qq_25576697/article/details/81138213 链接:https://www.nowcoder.com/acm/con ...