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 ...
随机推荐
- 金蝶handler中 collection 代码片段理解
1,AtsOverTimeBillBatchEditHandler中collection的理解 SelectorItemCollection selectors = new SelectorItemC ...
- 【题解】BZOJ4548 小奇的糖果(树状数组)
[题解]BZOJ4548 小奇的糖果(树状数组) 说在前面:我有个同学叫小奇,他有一个朋友叫达达,达达特爱地理和旅游,初中经常AK地理,好怀恋和他已经达达一起到当时初中附近许多楼盘的顶楼逛的时光... ...
- 洛谷$ P$4317 花神的数论题 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 开始看到感觉有些新奇鸭,仔细一想发现还是个板子鸭,,, 考虑设$f_{i}$表示$sum[j]=i$的$j$的个数 日常考虑$dfs$呗,考虑变量要设哪些$Q ...
- linux(raspbian)下mysql的安装,权限设置和用户管理
一 MySQL安装:(1) 使用apt-get安装, 由于raspbian是基于Debian的自由操作系统,debian默认自带apt-get指令安装应用因此可以使用来安装 sudo apt-get ...
- Selenium python爬虫
Selenium + Python3 爬虫 准备工作 Chrome驱动下载地址(可正常访问并下载),根据自己chrome的版本下载 Chrome版本 下载地址 78 https://chromedri ...
- realme X2谷歌套件
目前市面上的很多手机是不支持谷歌相关组件的,经过不断的测试成功适配realme X2(真机测试完美适配) 为框架的GMS是用户想要体验整套Google服务不可绕开的一环,Google地图.Play商店 ...
- JVM之对象
几乎所有对象都是在堆中分配内存的,这次来讲讲java的对象. 对象的创建主要分为以下几步: 首先,查看类是否装载.当JVM读取到new指令的时候,会拿着符号描述去方法区寻找它所属的类,如果未查找到,则 ...
- ArcEngine 创建线要素图层
在创建要素图层的时候,默认的几何类型是Polygon: Dim objectClassDescription As IObjectClassDescription = New FeatureClass ...
- 基于Saltstack、Artifactory打造传统模式下持续部署平台
一.持续部署 1. 现状 由于没有建立标准的持续部署流程,导致了版本管理混乱,制品管理混乱,上线持续时间长,上线测试覆盖不全面,业务流量上升后故障较多,排查复杂.运维.测试.开发人员每次版本迭代的时候 ...
- 2018 Multi-University Training Contest 10
Recently, TeaTree acquire new knoledge gcd (Greatest Common Divisor), now she want to test you. As ...