前面Zabbix使用的数据库是mysql,数据库备份不用多说,必须滴,由于使用的是innodb引擎,既然做,那就使用第三方强大的Xtrabackup工具来热备吧,Xtrabackup的说明,参见https://my.oschina.net/u/1171265/blog/200437

  • 数据库备份:

简单粗暴,下面给出mysql备份脚本:

  1. #!/bin/bash
  2. #mysql热备脚本,Version:1.0
  3. #Author:jzd
  4. #备份策略:每周一进行完整备份,以后每一天在前一天的基础上进行增量备份
  5. #
  6. #备份目录
  7. back_dir="/back"
  8.  
  9. #备份数据库信息
  10. host="127.0.0.1"
  11. dbuser="dbuser"
  12. dbpasswd="dbpasswd"
  13.  
  14. #日志文件
  15. back_log="${back_dir}/mysql_back.log"
  16.  
  17. #week day
  18. week_day=`date +%w`
  19. #yesterday
  20. yesterday=`date +%F -d "1 days ago"`
  21.  
  22. #日志记录函数
  23. function log(){
  24.  
  25. echo "`date` $1" | tee -a ${back_log}
  26.  
  27. }
  28.  
  29. #判断当前日期,是周一进行全备份,其他时间进行增量备份
  30. if [ ${week_day} -eq 1 ]; then
  31. #完整备份
  32. log "周${week_day}开始完全备份..."
  33. innobackupex --host=${host} --user=${dbuser} --password=${dbpasswd} ${back_dir} &>> ${back_log}
  34. if [ $? -eq 0 ]; then
  35. log "完全备份完毕."
  36. else
  37. log "完全备份出错,请检查."
  38. exit 1
  39. fi
  40. else
  41. let dir_num=`find ${back_dir} -type d -name "${yesterday}*" | wc -l`
  42. if [ ${dir_num} -ne 1 ]; then
  43. log "昨天增量目录未找到或昨天备份目录大于等于2个,请确认后再次备份."
  44. exit 1
  45. fi
  46. incremental_dir=`find ${back_dir} -type d -name "${yesterday}*"`
  47. log "周${week_day}开始增量备份..."
  48. #增量备份
  49. innobackupex --host=${host} --user=${dbuser} --password=${dbpasswd} --incremental ${back_dir} --incremental-basedir=${incremental_dir} &>> ${back_log}
  50. if [ $? -eq 0 ]; then
  51. log "增量备份成功."
  52. else
  53. log "备份失败,请检查日志..."
  54. exit 1
  55. fi
  56. fi
  57.  
  58. exit $?

需修改的地方,也可以写成配置文件source进去,完全可以用在生产环境。

#备份目录

back_dir="/back"

#备份数据库信息

host="127.0.0.1"

dbuser="dbuser"

dbpasswd="dbpasswd"

#日志文件

back_log="${back_dir}/mysql_back.log"

  • 数据恢复:

话说备份容易,恢复不易啊,下面也给出恢复脚本,配合上面备份脚本使用,但是恢复完毕后,需手动恢复当日的二进制文件,恢复方法见开篇Xtrabackup介绍文章;

恢复脚本的星期和日期对应的转换,搞得头都大了,缠了两天,判断太多,导致太乱,于是多使用函数,发现自己对函数的使用加强了(哈哈,相对于以前,感觉自己有面向对象的思想了,但这是shell)

  1. #!/bin/bash
  2. #mysql数据恢复脚本
  3. #Author:jzd
  4. #Version:V1.0
  5.  
  6. #back dir
  7. back_dir='/back'
  8. #full back day
  9. full_back_day=1
  10. #today
  11. today=`date +%F`
  12. #week day
  13. week_day=`date +%w`
  14. #log file
  15. recovery_log="${back_dir}/mysql_recovery.log"
  16.  
  17. #log
  18. function log(){
  19. echo "`date` $1" | tee -a ${recovery_log}
  20. }
  21.  
  22. #find back dir
  23. function finddir(){
  24. if [ `find $back_dir -type d -name "$1*" | wc -l` -ne 1 ]; then
  25. log "发现备份目录$1为0个或多于一个,请检查..."
  26. exit 1
  27. else
  28. log "发现备份目录`find $back_dir -type d -name "$1*"`"
  29. find_dir="`find $back_dir -type d -name "$1*"`"
  30. fi
  31. }
  32.  
  33. #all recovery
  34. function allredo(){
  35. log "开始完整备份恢复准备..."
  36. innobackupex --apply-log --redo-only $1 &>> ${recovery_log}
  37. if [ $? -ne 0 ]; then
  38. log "完整恢复准备出错,请检查..."
  39. exit 1
  40. fi
  41. log "完整备份恢复准备完成"
  42. }
  43.  
  44. #incremental recovery
  45. function incredo(){
  46. log "开始增量数据恢复准备..."
  47. innobackupex --apply-log --redo-only $1 --incremental-dir=$2 &>> ${recovery_log}
  48. if [ $? -ne 0 ]; then
  49. log "增量数据恢复准备出错,请检查..."
  50. exit 1
  51. fi
  52. log "增量数据$2恢复准备完成"
  53. }
  54. #real recovery
  55. function recovery(){
  56. log "备份数据准备完成,开始恢复数据..."
  57. innobackupex --copy-back $1 &>> ${recovery_log}
  58. if [ $? -ne 0 ]; then
  59. log "完整恢复准备出错,请检查..."
  60. exit 1
  61. fi
  62. log "恢复数据完成,请检查."
  63. log "请手动恢复二进制文件数据."
  64. }
  65.  
  66. #判断今日是否是周一
  67.  
  68. if [ $week_day -eq ${full_back_day} ]; then
  69. finddir ${today}
  70. all_dir="${find_dir}"
  71. if [ ! -z "${all_dir}" ]; then
  72. allredo $all_dir
  73. recovery $all_dir
  74. else
  75. log "未发现今日备份,恢复上周数据."
  76. for i in "7 6 5 4 3 2 1"
  77. do
  78. back_date=`date +%F -d "${i} days ago"`
  79. if [ $i -eq 7 ]; then
  80. finddir ${back_date}
  81. all_dir="${find_dir}"
  82. allredo ${all_dir}
  83. else
  84. finddir ${back_date}
  85. dir_back=${find_dir}
  86. incredo ${all_dir} ${dir_back}
  87. fi
  88. done
  89. recovery ${all_dir}
  90. fi
  91. else
  92. back_date=`date +%F -d "$((${week_day}-${full_back_day})) days ago"`
  93. finddir ${back_date}
  94. all_dir="${find_dir}"
  95. allredo ${all_dir}
  96. let flag=$((${week_day}-1-${full_back_day}))
  97. while [ ${flag} -ge 0 ]
  98. do
  99. incr_date=`date +%F -d "${flag} days ago"`
  100. finddir ${incr_date}
  101. incr_dir="${find_dir}"
  102. incredo ${all_dir} ${incr_dir}
  103. let flag=`expr $flag - 1`
  104. done
  105. recovery ${all_dir}
  106. fi
  107.  
  108. 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. SQL数据缓存依赖总结

    以前只听过SQL server数据缓存依赖,但一直没使用,由于项目需要,才研究了一番,发现了一个很诡异的问题,竟然是一个操作顺序问题导致的. SQL server数据缓存依赖有两种实现模式,轮询模式, ...

  2. 【SqlServer】T-SQL的简介及基本用法

    一.T-SQL概述 SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL.T-SQL与PL/SQL不同,并没有固定的程序结构.T-SQL包括以下4个部分: DD ...

  3. 恢复oracle中用PLSQL误删除drop掉的表

    一.查看回收站中表 select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recy ...

  4. Java Nashorn--Part 2

    在命令行中执行 JavaScript 现在我们有一个 my_script.js 文件,想在 Nashorn 下执行,则需要在命令行下执行该命令: jrunscript my_script.js jru ...

  5. []如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  6. 阮一峰 IaaS,PaaS,SaaS 的区别

    链接: IaaS,PaaS,SaaS 的区别 作者: 阮一峰 日期: 2017年7月23日 越来越多的软件,开始采用云服务. 云服务只是一个统称,可以分成三大类. IaaS:基础设施服务,Infras ...

  7. Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

    1.调用服务时服务 当我们使用 Web Service 或 WCF 服务时,常把读取的数据转化为string类型(xml格式),当数据量达到一 定数量时,会出现以下异常: 错误:格式化程序尝试对消息反 ...

  8. 图数据库titan 和 rexster安装手册

    titan是图数据库, rexster是图显示服务 titan 安装 下载 titan 0.3.2 解压 titan-all-0.3.2.zip 到 /opt/hugedata/share/解压后得到 ...

  9. 基于数据库构建分布式的ID生成方案

    在分布式系统中,生成全局唯一ID,有很多种方案,但是在这多种方案中,每种方案都有有缺点,下面我们之针对通过常用数据库来生成分布式ID的方案,其它方法会在其它文中讨论: 1,RDBMS生成ID: 这里我 ...

  10. Spring Security教程(四):自定义登录页

    在前面的例子中,登陆页面都是用的Spring Security自己提供的,这明显不符合实际开发场景,同时也没有退出和注销按钮,因此在每次测试的时候都要通过关闭浏览器来注销达到清除session的效果. ...