备份恢复脚本

# cat my_full_backup.sh
#!/bin/bash
BEGINTIME=`date +"%Y-%m-%d %H:%M:%S"`
format_time=`date +"%Y-%m-%d_%H:%M:%S"`
week=`date +%w`
port=3306
ip=192.168.1.101
backdir=/tmp/xtrabackup
file_cnf=/app/mysqldata/3306/my.cnf
user_name=xtrabk
password=onlybackup
out_log=$backdir/Xtrabackup_log_$format_time
time_cost=$backdir/Xtrabackup_time.txt
mysql_path=/usr/bin

mkdir -p $backdir

#full
if [ ! -d "$backdir/full" ];then
        echo "#####start full backup at $BEGINTIME to directory full" >>$time_cost
        ${mysql_path}/innobackupex --defaults-file=$file_cnf --no-timestamp --parallel=4 --throttle=200 --kill-long-queries-timeout=300 --kill-long-query-type=select --user=$user_name --password=$password   --host=$ip --port=$port  $backdir/full 1> $out_log 2>&1
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 "it takes $spendtime sec for packing the data directory" >>$time_cost
# cat my_full_recover.sh
#NOTE:恢复开始前请确保mysql服务停止以及数据和日志目录清空,如
rm -rf /app/mysqldata/3306/data/*
rm -rf /app/mysqldata/3306/binlog/*
rm -rf /app/mysqldata/3306/redolog/*
rm -rf /app/mysqldata/3306/tmp/*
rm -rf /app/mysqldata/3306/undolog/*
#rm -rf /app/mysqldata/3306/error.log /app/mysqldata/3306/slow-queries.log

INNOBACKUPEX=innobackupex
INNOBACKUPEX_PATH=/usr/bin/$INNOBACKUPEX
TMP_LOG="/tmp/restore.$$.log"
MY_CNF=/etc/my.cnf
BACKUP_DIR=/tmp/xtrabackup # 你的备份主目录
FULLBACKUP_DIR=$BACKUP_DIR/full # 全库备份的目录
INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量备份的目录
MEMORY=2048M # 还原的时候使用的内存限制数
ERRORLOG=`grep -i "^log-error" $MY_CNF |cut -d = -f 2`
MYSQLD_SAFE=/usr/local/mysql/bin/mysqld_safe
MYSQL_PORT=3306

check_innobackupex_fail()
{
    if [ -z "`tail -2 $TMP_LOG | grep ‘completed OK!‘`" ] ; then
    echo "$INNOBACKUPEX命令执行失败:"; echo
    echo "---------- $INNOBACKUPEX的错误输出 ----------"
    cat $TMP_LOG
    #保留一份备份的详细日志
    logfiledate=restore.`date +%Y%m%d%H%M`.txt
    cat $TMP_LOG>/tmp/$logfiledate
    rm -f $TMP_LOG
    exit 1
  fi
}

echo "*****************************"
echo "Prepare:使用完整备份进行恢复..........."
echo "*****************************"
$INNOBACKUPEX_PATH --defaults-file=$MY_CNF --apply-log --redo-only --use-memory=$MEMORY $FULLBACKUP_DIR > $TMP_LOG 2>&1
check_innobackupex_fail

echo "*****************************"
echo "Copyback:数据库还原中 ...请稍等"
echo "*****************************"
$INNOBACKUPEX_PATH --defaults-file=$MY_CNF --copy-back $FULLBACKUP_DIR > $TMP_LOG 2>&1
chown -R mysql:mysql /app/mysqldata/3306
check_innobackupex_fail

rm -f $TMP_LOG
echo "1.恭喜,还原成功!."
echo "*****************************"

#自动启动mysql
INIT_NUM=1
if [ ! -x $MYSQLD_SAFE ]; then
  echo "mysql安装时启动文件未安装到$MYSQLD_SAFE或无执行权限"
  exit 1  #0是执行成功,1是执行不成功
else
echo "启动本机mysql端口为:$MYSQL_PORT的服务"
$MYSQLD_SAFE --defaults-file=$MY_CNF  > /dev/null &
while  [ $INIT_NUM  -le 10 ]
      do
        PORTNUM=`netstat -lnt|grep ${MYSQL_PORT}|wc -l`
        echo "mysql启动中....请稍等..."
        sleep 10
        if [ $PORTNUM = 1  ];
        then
             echo -e "\e[32m mysql****启动成功**** \e[m"
        exit 0
        fi
        INIT_NUM=$(($INIT_NUM +1))
      done
echo -e "\e[31m mysql启动失败或启动时间过长,请检查错误日志 `echo ‘cat ‘ ${ERRORLOG}` \e[m"
echo "*****************************************"
exit 0
fi

END_RESTORE_TIME=`date +%F‘ ‘%T‘ ‘%w`
echo "数据库还原完成于: $END_RESTORE_TIME"
exit 0

原文地址:https://www.cnblogs.com/allenhu320/p/11310805.html

时间: 2024-08-03 11:36:01

备份恢复脚本的相关文章

SVN备份/恢复脚本

上一篇介绍了svn的配置,这里就写了两个脚本对svn进行全备和恢复,由于是全备,所以可以做个计划任务,每天执行一次即可.保留几天的数据. 1.备份脚本: #!/bin/sh # # # Description: SVN full backup of the project # Author: Mr.chen # Date: 2015/02/10 # Email:  # # SVN_BASICDIR="/usr/local/svn/bin" DAY=5 # Backup files ke

xtrabackup备份恢复测试 -转

Chinaunix首页 | 论坛 | 认证专区 | 博客 登录 | 注册 博文      博主 王恒-Henryhengwang.blog.chinaunix.net 我的项目:https://github.com/HengWang/ ChinaUnix博客技术文章推荐标准和规范 有奖征集:文集--博客系列博文管理 CU博客频道6月技术图书有奖试读活动 首页 | 博文目录 | 关于我 king_wangheng 博客访问: 486455 博文数量: 117 博客积分: 1715 博客等级: 上尉

企业实战:mysql5.6数据库备份、恢复脚本

一.mysql数据库备份脚本 备份脚本1: [[email protected] scripts]# vim elab_fenku_backup.sh #!/bin/sh #create at 2018-01-08 #author oldboy #qq 88888 echo "--------------------------ychfq:`date +%F-%H`--------------------------" DB_USER="oldboy_bak" DB

MongoDB迁移方案-冷备份+增量备份恢复

QQ群:465614686 1.  环境构建步骤 (1)线上环境 都是副本集模式 3个业务访问节点+1个隐藏节点 (隐藏节点做hadoop.spark数据同步使用以及数据报表查询等) (2)主机以及配置说明 10.21.18.21  primary节点    优先级为100 10.21.18.22  secondary节点  优先级为90 10.21.18.23  secondary节点  优先级为80 10.21.18.24  隐藏节点       优先级为0 系统配置:128G内存,64Co

Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是指备份执行时当天的日期),最后只保留最近7天的备份 2.上传/home/osyunweibak里面的备份文件到远程FTP服务器上,并且只保留最近7天的备份. 3.FTP服务器:192.168.21.139 端口:21 账号:osyunwei 密码:123456 osyunweibak为备份文件存放目

使用xtrabackup备份恢复Mariadb数据库

使用xtrabackup进行备份 Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: 官方介绍和下载地址:https://www.percona.com/software/percona-xtra

ezjail服务器备份恢复方法

FreeBSD下使用ezjail管理jails虚拟机很方便,公司有多台ezjails服务器,运行n多jails虚拟机,一次硬盘故障,做了一次整机恢复,将方法归纳如下: 备份准备: 建议ezjails服务器安装2块同样大小的硬盘,一块作为备份.我是通过cron每日rsync备份需要的文件 需要备份的文件: /etc/rc.conf /etc/rc.local /etc/fstab.* /etc/crontab /usr/local/etc/ezjail/ /usr/local/etc/ezjail

利用XtraBackup实现MySQL物理备份恢复

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: Xtrabackup中主要包含两个工具: xtrabackup:是用于热备份innodb, xtradb表中数据的工具,不能备份其他类型的表,也不能备份数据表结构: in

大话去哪儿网备份恢复平台

来源:http://mp.weixin.qq.com/s/ldu7iS5c3d0ND3foPYoLXQ 作者简介:许子文 曾任达梦高级数据库工程师,现任去哪儿网高级DBA,负责MySQL .Hbase运维和自动化运维工具的开发.在RDBMS拥有多年数据库架构设计.性能优化和运维经验,对海量数据有丰富的运维经验和个人见解. 备份恢复是DBA日常运维工作中的重中之重??怎么快速高效完成备份和恢复??怎么有效平衡DB数据量和业务重要等级??接下来从技术和业务的角度介绍Qunar数据库备份恢复平台的演变