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 ...
随机推荐
- Centos7-Lvs+Keepalived架构
Centos7-Lvs+Keepalived架构 LVS+Keepalived 介绍 1 . LVS LVS 是一个开源的软件,可以实现 LINUX 平台下的简单负载均衡. LVS 是 Lin ...
- ubuntu下安装配置minicom(解决默认的端口/dev/tty8,改不过来的问题)
Minicom是linux下串口通信的软件,下面讲下ubuntu Minicom的安装和配置. 安装: sudo apt-get install minicom 或在新立得软件包管理器中搜索“mini ...
- VS2010 C++环境下DLL和LIB文件的生成与调试
利用VS2010工具,调试DLL文件的方法现总结如下: 在一个解决方案中生成两个工程,假设MYDLL和MYDLG两个工程,前者是DLL工程,后者DLG调用前边的DLL工程.设置如下: 目录如下:图,本 ...
- 如何检查后台服务(Android的Service类)是否正在运行?
private boolean isServiceRunning() { ActivityManager manager = (ActivityManager) getSystemService(AC ...
- golang学习笔记 ---dup
对文件做拷贝.打印.搜索.排序.统计或类似事情的程序都有一个差不多的程序结构:一个处理输入的循环,在每个元素上执行计算处理,在处理的同时或最后产生输出.我们会展示一个名为 dup 的程序的三个版本 p ...
- SQL Tuning Advisor
SQL Tuning Advisorsql调优顾问可提供的建议有:-收集对象的统计信息-创建索引-重写sql语句-创建sql profile-创建sql plan baseline SQL Tunin ...
- 浅谈cocos2dx(18) 中工厂模式
----我的生活.我的点点滴滴! ! cocos2d-x中也有工厂模式.何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类.而这些被创建的 ...
- 基于TransactionScope类的分布式隐式事务
System.Transactions 命名空间中除了上一节中提到的基于 Transaction 类的显式编程模型,还提供使用 TransactionScope 类的隐式编程模型,它与显示编程模型相比 ...
- 常用代码之八:setTimeout 和 clearTimeout。
1.先写一个错误的例子: function DealSomething() { //write some code window.setTimeout(function ...
- cocos2d-x 模态对话框的实现
心情不好,恩.不扯淡了.直接讲. ================================== 在泰然看了一篇实现模态对话框的文章,写的还不错,然后在其基础上加了我简单加了一层灰色透明背景,这 ...