前面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热备份的更多相关文章

  1. xtrabackup备份(MySQL备份)与恢复

    xtrabackup备份(MySQL备份)与恢复 1. innobackupex参数选项 --no-timestamp: 不创建一个时间戳 --defaults-file=[MY.CNF] //指定配 ...

  2. 通过xtrabackup工具对mysql数据库做全备

    需求描述: 使用xtrabackup工具对mysql实例中的所有的数据库进行备份,并且将备份的过程输出到指定的日志文件中. 操作过程: 1.使用xtrabacup工具备份mysql实例 xtrabac ...

  3. 使用 Xtrabackup 在线对MySQL做主从复制【转】

    1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...

  4. xtrabackup增量备份mysql +MHA

    http://blog.csdn.net/yanggd1987/article/category/2214421 https://www.centos.bz/2013/09/innobackupex- ...

  5. 使用 Xtrabackup 在线对MySQL做主从复制

    1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...

  6. 14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制:

    14.19 InnoDB and MySQL Replication InnoDB 和MySQL 复制: MySQL 复制工作对于InnoDB 表和对于MyISAM表. 它是可能使用复制的方式 存储引 ...

  7. xtrabackup在线迁移mysql并搭建为主主同步

    一.背景 工作中有需求数据库需要迁移,但是不能停服,不能锁库锁表影响业务的正常运行,所以使用XtraBackup 二.环境: 操作系统:CentOS Linux release 7.4.1708 (C ...

  8. 【原创】Innodb中mysql如何快速删除2T的大表

    小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...

  9. mysql 热备份

    xtrabackup mysql 的备份和恢复 1.准备 安装依赖 yum install perl-DBD-MySQL perl-Time-HiRes libaio libaio-devel -y ...

随机推荐

  1. 实测iOS Dynamic Framework 对 App 启动时间的影响效果

    最近看到的Slow App Startup Times里提到: The dynamic loader finds and reads the dependent dynamic libraries ( ...

  2. java中enum的应用

    package com.demo; public enum TestEnum { A("hello"), B("world"); private String ...

  3. 纯CSS兑现侧边栏/分栏高度自动相等(转)

    这里直接介绍我认为的最佳的侧边栏/分栏高度自动相等方法.核心的CSS代码如下(数值不固定): margin-bottom:-3000px; padding-bottom:3000px; 再配合父标签的 ...

  4. 【java】JVM的内存区域划分

    学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行 ...

  5. Swift 扩展

    前言 扩展就是给一个现存类.结构体.枚举或者协议添加新的属性或者方法,无需修改目标的源代码,就可以把想要的代码加到目标上面. 扩展可以用来扩展现有类型的计算属性.构造器.方法和下标. 不能添加一个已经 ...

  6. Linux日期时间显示输出

    1.输出当前年月日 echo $(date +%F) 2014-02-21 2.输出当前时间(时分) echo $(date +%R) 12:45 3.输出当前时间(时分秒) echo $(date ...

  7. 【转】Currying 的局限性

    Currying 的局限性 很多基于 lambda calculus 的程序语言,比如 ML 和 Haskell,都习惯用一种叫做 currying 的手法来表示函数.比如,如果你在 Haskell ...

  8. PowerShell 获取Site Collection下被签出的文件

    由于权限的设置,当文件被签出时导致别人不可见了,这对校验文件个数的人来说着实是件烦恼的事.幸好利用PowerShell,可以获取Site Collection下被签出的文件. Resolution A ...

  9. css 温故而知新 字体方向 将文字竖着显示

    writing-mode: vertical-rl;

  10. windows 自动移动maven jar包到jmeter 文件夹下面

    jmeter 自动移动maven jar包到jmeter 文件夹下面 bat 文件 rem 本文件放在jmeter 脚本maven项目根目录下面,和pom.xml在同一个文件夹下面 rem 预置条件, ...