Xtrabackup—InnoDB实现mysql热备份
前面Zabbix使用的数据库是mysql,数据库备份不用多说,必须滴,由于使用的是innodb引擎,既然做,那就使用第三方强大的Xtrabackup工具来热备吧,Xtrabackup的说明,参见https://my.oschina.net/u/1171265/blog/200437
数据库备份:
简单粗暴,下面给出mysql备份脚本:
- #!/bin/bash
- #mysql热备脚本,Version:1.0
- #Author:jzd
- #备份策略:每周一进行完整备份,以后每一天在前一天的基础上进行增量备份
- #
- #备份目录
- back_dir="/back"
- #备份数据库信息
- host="127.0.0.1"
- dbuser="dbuser"
- dbpasswd="dbpasswd"
- #日志文件
- back_log="${back_dir}/mysql_back.log"
- #week day
- week_day=`date +%w`
- #yesterday
- yesterday=`date +%F -d "1 days ago"`
- #日志记录函数
- function log(){
- echo "`date` $1" | tee -a ${back_log}
- }
- #判断当前日期,是周一进行全备份,其他时间进行增量备份
- if [ ${week_day} -eq 1 ]; then
- #完整备份
- log "周${week_day}开始完全备份..."
- innobackupex --host=${host} --user=${dbuser} --password=${dbpasswd} ${back_dir} &>> ${back_log}
- if [ $? -eq 0 ]; then
- log "完全备份完毕."
- else
- log "完全备份出错,请检查."
- exit 1
- fi
- else
- let dir_num=`find ${back_dir} -type d -name "${yesterday}*" | wc -l`
- if [ ${dir_num} -ne 1 ]; then
- log "昨天增量目录未找到或昨天备份目录大于等于2个,请确认后再次备份."
- exit 1
- fi
- incremental_dir=`find ${back_dir} -type d -name "${yesterday}*"`
- log "周${week_day}开始增量备份..."
- #增量备份
- innobackupex --host=${host} --user=${dbuser} --password=${dbpasswd} --incremental ${back_dir} --incremental-basedir=${incremental_dir} &>> ${back_log}
- if [ $? -eq 0 ]; then
- log "增量备份成功."
- else
- log "备份失败,请检查日志..."
- exit 1
- fi
- fi
- exit $?
需修改的地方,也可以写成配置文件source进去,完全可以用在生产环境。
#备份目录
back_dir="/back"
#备份数据库信息
host="127.0.0.1"
dbuser="dbuser"
dbpasswd="dbpasswd"
#日志文件
back_log="${back_dir}/mysql_back.log"
数据恢复:
话说备份容易,恢复不易啊,下面也给出恢复脚本,配合上面备份脚本使用,但是恢复完毕后,需手动恢复当日的二进制文件,恢复方法见开篇Xtrabackup介绍文章;
恢复脚本的星期和日期对应的转换,搞得头都大了,缠了两天,判断太多,导致太乱,于是多使用函数,发现自己对函数的使用加强了(哈哈,相对于以前,感觉自己有面向对象的思想了,但这是shell)
- #!/bin/bash
- #mysql数据恢复脚本
- #Author:jzd
- #Version:V1.0
- #back dir
- back_dir='/back'
- #full back day
- full_back_day=1
- #today
- today=`date +%F`
- #week day
- week_day=`date +%w`
- #log file
- recovery_log="${back_dir}/mysql_recovery.log"
- #log
- function log(){
- echo "`date` $1" | tee -a ${recovery_log}
- }
- #find back dir
- function finddir(){
- if [ `find $back_dir -type d -name "$1*" | wc -l` -ne 1 ]; then
- log "发现备份目录$1为0个或多于一个,请检查..."
- exit 1
- else
- log "发现备份目录`find $back_dir -type d -name "$1*"`"
- find_dir="`find $back_dir -type d -name "$1*"`"
- fi
- }
- #all recovery
- function allredo(){
- log "开始完整备份恢复准备..."
- innobackupex --apply-log --redo-only $1 &>> ${recovery_log}
- if [ $? -ne 0 ]; then
- log "完整恢复准备出错,请检查..."
- exit 1
- fi
- log "完整备份恢复准备完成"
- }
- #incremental recovery
- function incredo(){
- log "开始增量数据恢复准备..."
- innobackupex --apply-log --redo-only $1 --incremental-dir=$2 &>> ${recovery_log}
- if [ $? -ne 0 ]; then
- log "增量数据恢复准备出错,请检查..."
- exit 1
- fi
- log "增量数据$2恢复准备完成"
- }
- #real recovery
- function recovery(){
- log "备份数据准备完成,开始恢复数据..."
- innobackupex --copy-back $1 &>> ${recovery_log}
- if [ $? -ne 0 ]; then
- log "完整恢复准备出错,请检查..."
- exit 1
- fi
- log "恢复数据完成,请检查."
- log "请手动恢复二进制文件数据."
- }
- #判断今日是否是周一
- if [ $week_day -eq ${full_back_day} ]; then
- finddir ${today}
- all_dir="${find_dir}"
- if [ ! -z "${all_dir}" ]; then
- allredo $all_dir
- recovery $all_dir
- else
- log "未发现今日备份,恢复上周数据."
- for i in "7 6 5 4 3 2 1"
- do
- back_date=`date +%F -d "${i} days ago"`
- if [ $i -eq 7 ]; then
- finddir ${back_date}
- all_dir="${find_dir}"
- allredo ${all_dir}
- else
- finddir ${back_date}
- dir_back=${find_dir}
- incredo ${all_dir} ${dir_back}
- fi
- done
- recovery ${all_dir}
- fi
- else
- back_date=`date +%F -d "$((${week_day}-${full_back_day})) days ago"`
- finddir ${back_date}
- all_dir="${find_dir}"
- allredo ${all_dir}
- let flag=$((${week_day}-1-${full_back_day}))
- while [ ${flag} -ge 0 ]
- do
- incr_date=`date +%F -d "${flag} days ago"`
- finddir ${incr_date}
- incr_dir="${find_dir}"
- incredo ${all_dir} ${incr_dir}
- let flag=`expr $flag - 1`
- done
- recovery ${all_dir}
- fi
- exit 0
Xtrabackup—InnoDB实现mysql热备份的更多相关文章
- xtrabackup备份(MySQL备份)与恢复
xtrabackup备份(MySQL备份)与恢复 1. innobackupex参数选项 --no-timestamp: 不创建一个时间戳 --defaults-file=[MY.CNF] //指定配 ...
- 通过xtrabackup工具对mysql数据库做全备
需求描述: 使用xtrabackup工具对mysql实例中的所有的数据库进行备份,并且将备份的过程输出到指定的日志文件中. 操作过程: 1.使用xtrabacup工具备份mysql实例 xtrabac ...
- 使用 Xtrabackup 在线对MySQL做主从复制【转】
1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...
- xtrabackup增量备份mysql +MHA
http://blog.csdn.net/yanggd1987/article/category/2214421 https://www.centos.bz/2013/09/innobackupex- ...
- 使用 Xtrabackup 在线对MySQL做主从复制
1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...
- 14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制:
14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制: MySQL 复制工作对于InnoDB 表和对于MyISAM表. 它是可能使用复制的方式 存储引 ...
- xtrabackup在线迁移mysql并搭建为主主同步
一.背景 工作中有需求数据库需要迁移,但是不能停服,不能锁库锁表影响业务的正常运行,所以使用XtraBackup 二.环境: 操作系统:CentOS Linux release 7.4.1708 (C ...
- 【原创】Innodb中mysql如何快速删除2T的大表
小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...
- mysql 热备份
xtrabackup mysql 的备份和恢复 1.准备 安装依赖 yum install perl-DBD-MySQL perl-Time-HiRes libaio libaio-devel -y ...
随机推荐
- SQL数据缓存依赖总结
以前只听过SQL server数据缓存依赖,但一直没使用,由于项目需要,才研究了一番,发现了一个很诡异的问题,竟然是一个操作顺序问题导致的. SQL server数据缓存依赖有两种实现模式,轮询模式, ...
- 【SqlServer】T-SQL的简介及基本用法
一.T-SQL概述 SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL.T-SQL与PL/SQL不同,并没有固定的程序结构.T-SQL包括以下4个部分: DD ...
- 恢复oracle中用PLSQL误删除drop掉的表
一.查看回收站中表 select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recy ...
- Java Nashorn--Part 2
在命令行中执行 JavaScript 现在我们有一个 my_script.js 文件,想在 Nashorn 下执行,则需要在命令行下执行该命令: jrunscript my_script.js jru ...
- []如何在Windows 10中更改文件夹背景颜色
ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...
- 阮一峰 IaaS,PaaS,SaaS 的区别
链接: IaaS,PaaS,SaaS 的区别 作者: 阮一峰 日期: 2017年7月23日 越来越多的软件,开始采用云服务. 云服务只是一个统称,可以分成三大类. IaaS:基础设施服务,Infras ...
- Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法
1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...
- 图数据库titan 和 rexster安装手册
titan是图数据库, rexster是图显示服务 titan 安装 下载 titan 0.3.2 解压 titan-all-0.3.2.zip 到 /opt/hugedata/share/解压后得到 ...
- 基于数据库构建分布式的ID生成方案
在分布式系统中,生成全局唯一ID,有很多种方案,但是在这多种方案中,每种方案都有有缺点,下面我们之针对通过常用数据库来生成分布式ID的方案,其它方法会在其它文中讨论: 1,RDBMS生成ID: 这里我 ...
- Spring Security教程(四):自定义登录页
在前面的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果. ...