实战:INNOBACKUPEX for mysql 5.6自己主动备份脚本
#backup.sh
#!/bin/sh
#
# 第一次运行它的时候它会检查是否有全然备份,否则先创建一个全库备份
# 当你再次执行它的时候。它会依据脚本中的设定来基于之前的全库备份进行增量备份
#ocpyang@126.com
INNOBACKUPEX_PATH=innobackupex #INNOBACKUPEX的命令
INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX_PATH #INNOBACKUPEX的命令路径
#mysql目标server以及username和password
MYSQL_CMD="--host=192.168.2.188 --user=system --password=password --port=3306"
MYSQL_UP="--user=system --password=password -ppassword" #mysql的username与password
TMPLOG="/tmp/innobackupex.$$.log"
MY_CNF=/usr/local/mysql/my.cnf #mysql的配置文件
MYSQL=/usr/bin/mysql
MYSQL_ADMIN=/usr/bin/mysqladmin
BACKUP_DIR=/backup # 备份的主文件夹
FULLBACKUP_DIR=$BACKUP_DIR/full # 全库备份的文件夹
INCRBACKUP_DIR=$BACKUP_DIR/incre # 增量备份的文件夹
FULLBACKUP_INTERVAL=86400 # 全库备份的间隔周期,时间:秒
KEEP_FULLBACKUP=1 # 至少保留几个全库备份
logfiledate=backup.`date +%Y%m%d%H%M`.txt
#開始时间
STARTED_TIME=`date +%s`
#############################################################################
# 显示错误并退出
#############################################################################
error()
{
echo "$1" 1>&2
exit 1
}
# 检查运行环境
if [ ! -x $INNOBACKUPEXFULL ]; then
error "$INNOBACKUPEXFULL未安装或未链接到/usr/bin."
fi
if [ ! -d $BACKUP_DIR ]; then
error "备份目标目录:$BACKUP_DIR不存在."
fi
if [ -z "`$MYSQL_ADMIN $MYSQL_UP status | grep 'Uptime'`" ] ; then
error "MySQL 没有启动执行."
fi
if ! `echo 'exit' | $MYSQL -s $MYSQL_CMD` ; then
error "提供的数据库username或password不对!"
fi
# 备份的头部信息
echo "----------------------------"
echo
echo "$0: MySQL备份脚本"
echo "開始于: `date +%F' '%T' '%w`"
echo
#新建全备和差异备份的文件夹
mkdir -p $FULLBACKUP_DIR
mkdir -p $INCRBACKUP_DIR
#查找最新的全然备份
LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`
# 查找近期改动的最新备份
LATEST_FULL_BACKUP_CREATED_TIME=`stat -c %Y $FULLBACKUP_DIR/$LATEST_FULL_BACKUP`
#假设全备有效进行增量备份否则运行全然备份
if [ "$LATEST_FULL_BACKUP" -a `expr $LATEST_FULL_BACKUP_CREATED_TIME + $FULLBACKUP_INTERVAL + 5` -ge $STARTED_TIME ] ; then
# 假设最新的全备未过期则以最新的全备文件名称命名在增量备份文件夹下新建文件夹
echo -e "全然备份$LATEST_FULL_BACKUP未过期,将依据$LATEST_FULL_BACKUP名字作为增量备份文件夹命名"
echo " "
NEW_INCRDIR=$INCRBACKUP_DIR/$LATEST_FULL_BACKUP
mkdir -p $NEW_INCRDIR
# 查找最新的增量备份是否存在.指定一个备份的路径作为增量备份的基础
LATEST_INCR_BACKUP=`find $NEW_INCRDIR -mindepth 1 -maxdepth 1 -type d | sort -nr | head -1`
if [ ! $LATEST_INCR_BACKUP ] ; then
INCRBASEDIR=$FULLBACKUP_DIR/$LATEST_FULL_BACKUP
echo -e "增量备份将以$INCRBASEDIR作为备份基础"
echo " "
else
INCRBASEDIR=$LATEST_INCR_BACKUP
echo -e "增量备份将以$INCRBASEDIR作为备份基础"
echo " "
fi
echo "使用$INCRBASEDIR作为基础做新的增量备份."
$INNOBACKUPEXFULL --defaults-file=$MY_CNF --use-memory=4G $MYSQL_CMD --incremental $NEW_INCRDIR --incremental-basedir $INCRBASEDIR > $TMPLOG 2>&1
else
echo "*********************************"
echo -e "正在运行全新的全然备份...请稍等..."
echo "*********************************"
$INNOBACKUPEXFULL --defaults-file=$MY_CNF --use-memory=4G $MYSQL_CMD $FULLBACKUP_DIR > $TMPLOG 2>&1
fi
#保留一份备份的具体日志
cat $TMPLOG>/backup/$logfiledate
if [ -z "`tail -1 $TMPLOG | grep 'innobackupex: completed OK!'`" ] ; then
echo "$INNOBACKUPEX命令运行失败:"; echo
echo -e "---------- $INNOBACKUPEX_PATH错误 ----------"
cat $TMPLOG
rm -f $TMPLOG
exit 1
fi
THISBACKUP=`awk -- "/Backup created in directory/ { split( \\\$0, p, \"'\" ) ; print p[2] }" $TMPLOG`
rm -f $TMPLOG
echo -n "数据库成功备份到:$THISBACKUP"
echo
# 提示应该保留的备份文件起点
LATEST_FULL_BACKUP=`find $FULLBACKUP_DIR -mindepth 1 -maxdepth 1 -type d -printf "%P\n" | sort -nr | head -1`
echo -e "必须保留$KEEP_FULLBACKUP份全备和全备$LATEST_FULL_BACKUP以后的全部增量备份."
#删除过期的全备
echo -e "寻找过期的全备文件并删除">>/backup/$logfiledate
for efile in $(/usr/bin/find $FULLBACKUP_DIR/ -mtime +6)
do
if [ -d $efile ]; then
rm -rf $efile
echo -e "删除过期全备文件:$efile" >>/backup/$logfiledate
elif [ -f $efile ]; then
rm -rf $file
echo -e "删除过期全备文件:$efile" >>/backup/$logfiledate
fi;
done
if [ $?
-eq "0" ];then
echo
echo -e "未找到能够删除的过期全备文件"
fi
echo
echo "完毕于: `date +%F' '%T' '%w`"
exit 0
实战:INNOBACKUPEX for mysql 5.6自己主动备份脚本的更多相关文章
- 实战:INNOBACKUPEX for mysql 5.6自己主动还原脚本-v2
脚本再次更新,共享一下! #!/bin/sh # # 用法: # ./restore.sh /你备份文件的全路径 #ocpyang@126.com INNOBACKUPEX=innobackupex ...
- 初阶项目一-集成一套linux系统:红帽系统,LVM分区,Apache服务,MySQL服务,数据定时备份脚本
目录 一.项目目标 二.实施工具 三.项目实施计划 四.安装rhel7.5操作系统 4.1 配置虚拟机 4.2 安装操作系统 4.3 系统配置 4.3.1 网络配置 4.3.2 修改主机名 4.3.3 ...
- mysql线上一个定时备份脚本
数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/ ...
- mysql主从集群定时备份脚本
#!/bin/bash dpath="/mysql_backup" mydays="7" username="root" mysql_p ...
- MySQL生产库全库备份脚本
创建一个单独的备份用户backup,不要用root 创建备份目录 :mkdir -p /databackup/fullbackup mysql> grant SELECT,RELOAD,SHOW ...
- mysql数据库每个表的备份脚本
对mysql数据库中的每张表进行按日期备份,思想是:先把每张表的表名取出取出,然后通过for循环去对每个表进行按日期备份 [root@ZFVM-APP-- backup]# vim dataname. ...
- Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...
- innobackupex 重启MySQL
当重新修改了MySQL的数据目录时: 重启报错: Starting MySQL.The server quit without updating PID file (/[FAILED]l/mysql/ ...
- [实战]MVC5+EF6+MySql企业网盘实战(28)——其他列表
写在前面 本篇文章将实现,其他文件类型的列表. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) [实战]MVC5+EF ...
随机推荐
- ubuntu下C++和C编程
一.anjuta Anjuta DevStudio 的官方地址:http://anjuta.sourceforge.net/Anjuta是一个C/C++ IDE,它最大的特色是灵活,同时打开多个文 ...
- POP数值动画
POP数值动画 效果 源码 https://github.com/YouXianMing/Animations // // PopNumberController.m // Animations // ...
- Java JDBC 基础知识
一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...
- 解决kylin sync table报错:MetaException(message:java.lang.ClassNotFoundException Class org.apache.hive.hcatalog.data.JsonSerDe not found
在kylin-gui中sync表default.customer_visit时报错: -- ::, ERROR [http-bio--exec-] controller.BasicController ...
- iOS开发-plist文件增删改查
plist第一次看到这个后缀名文件的时候感觉怪怪的,不过接触久了也就习以为常了,plist是Property List的简称可以理解成属性列表文件,主要用来存储串行化后的对象的文件.扩展名为.plis ...
- Search in Rotated Sorted Array leetcode java
题目: Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 ...
- TabLayout ViewPager Fragment 简介 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- WPF DataTrigger的两个用法
1.用在textbox等输入控件上,验证输入是否合法.首先定义一个Converter, 2.Xaml里面这样子写,意思是输入的数字,如果小于100则显示为红色. 3.combox等列表控件里面,也可以 ...
- 【Struts2学习笔记(9)】单文件上传和多文件上传
(1)单文件上传 第一步:在WEB-INF/lib下增加commons-fileupload-1.2.1.jar.commons-io-1.3.2.jar. 这两个文件能够从http://common ...
- 【Nodejs】理想论坛帖子爬虫1.01
用Nodejs把Python实现过的理想论坛爬虫又实现了一遍,但是怎么判断所有回调函数都结束没有好办法,目前的spiderCount==spiderFinished判断法在多页情况下还是会提前中止. ...