innobackupex 恢复脚本
此脚本需要与我前几天写的备份脚本配套才能使用
这里也对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 恢复脚本的更多相关文章
- Mongodb之备份恢复脚本
本分脚本: !/bin/bash #备份文件执行路径 which mongodump DUMP= #临时备份目录 OUT_DIR= #本分存放目录 TAR_DIR= #获取当前系统时间==> 2 ...
- MySQL的恢复脚本
原文转自: http://blog.csdn.net/dbanote/article/details/13295727 应用场景: ********************************** ...
- MySQL XtraBackup自动恢复脚本
#!/bin/sh ################## #author:rrhelei@126.com# ################## #xtrabackup2.1.8 # 使用方法: ...
- innobackupex 恢复实验
[root@localhost backup]# pwd /backup [root@localhost backup]# ll 总用量 drwxr root root Jul : basebacku ...
- innobackupex 单脚本循环7天一全备6增备脚本更新
#!/bin/bash #日期转为天数 function date2days { echo "$*" | awk '{ z=-$)/); y=$+-z; m=$+*z-; j=*m ...
- innobackupex备份脚本
#!/bin/bash # 10 23 * * * /bin/bash /data/script/backup.sh BDATE=`date +%Y%m%d%H%M%S`BPATH=/data/bac ...
- mongo数据备份及恢复脚本
#!/bin/bashtime="$(date +"%Y.%m.%d")" id=`echo "show dbs;"|/usr/local/ ...
- 『BASH』——文件权限批量恢复脚本——「Permission Revovery」
一.恢复指定程序包所有文件的权限: #!/bin/bash #Assume that you have mounted a correct orignal-system on /mnt read -p ...
- Confluence 6 用户提交的备份和恢复脚本
下面的代码是用户提交的,在使用的时候需要小心,因为 Atlassian 不提供这些代码的技术支持.如果你在使用或者修改这些代码的时候有任何问题,请粘贴到 post them to Atlassian ...
随机推荐
- 什么?我往Redis写的数据怎么没了?
大概是因为int没有因为change方法而改变原值,所以就说它传过去的是自身的值,因而叫值传递:User对象经过change方法后,对象的数据变了,就认为是因为实参和形参指向的是同一片内存空间,内存空 ...
- 工具系列 | Docker基本概念小结
▍什么是Docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容 ...
- 洛谷$P1712\ [NOI2016]$区间 线段树
正解:线段树 解题报告: 传送门$QwQ$ $umm$很久以前做的了来补个题解$QwQ$ 考虑给每个区间按权值($r-l$从大往小排序,依次加入,然后考虑如果有一个位置被覆盖次数等于$m$了就可以把权 ...
- $Noip2018/Luogu5022$ 旅行
$Luogu$ $Description$ 一个$n$个点,$m$条边的图.$m=n-1$或$m=n$.任意选取一点作为起始点,可以去往一个没去过的点,或者回到第一次到达这个点时来自的点.要求遍历整个 ...
- AbstractFactoryPattern(抽象工厂模式)-----Java/.Net
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.
- 洛谷P1147 连续自然数和 题解 枚举
题目链接:https://www.luogu.com.cn/problem/P1147 题目大意: 给你一个数 \(M\) ,求有多少对连续自然数对之和为 \(M\),输出这列连续自然数对的首项和末项 ...
- Huffman树及其编码(STL array实现)
这篇随笔主要是Huffman编码,构建哈夫曼树有各种各样的实现方法,如优先队列,数组构成的树等,但本质都是堆. 这里我用数组来存储数据,以堆的思想来构建一个哈弗曼树,并存入vector中,进而实现哈夫 ...
- cogs 619. [金陵中学2007] 传话 Tarjan强连通分量
619. [金陵中学2007] 传话 ★★ 输入文件:messagez.in 输出文件:messagez.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述] 兴趣小 ...
- 位运算上的小技巧 - AtCoder
Problem Statement There is an integer sequence of length 2N: A0,A1,…,A2N−1. (Note that the sequence ...
- html5中的Web Storage
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...