Xtrabackup实现Mysql的InnoDB引擎热备份
前面Zabbix使用的数据库是mysql,数据库备份不用多说,必须滴,由于使用的是innodb引擎,既然做,那就使用第三方强大的Xtrabackup工具来热备吧,Xtrabackup的说明,参见https://my.oschina.net/u/1171265/blog/200437
数据库备份:
简单粗暴,下面给出mysql备份脚本:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
#!/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 dayweek_day=`date +%w`#yesterdayyesterday=`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 fifiexit $? |
需修改的地方,也可以写成配置文件source进去,完全可以用在生产环境。
#备份目录
back_dir="/back"
#备份数据库信息
host="127.0.0.1"
dbuser="dbuser"
dbpasswd="dbpasswd"
#日志文件
back_log="${back_dir}/mysql_back.log"
数据恢复:
话说备份容易,恢复不易啊,下面也给出恢复脚本,配合上面备份脚本使用,但是恢复完毕后,需手动恢复当日的二进制文件,恢复方法见开篇Xtrabackup介绍文章;
恢复脚本的星期和日期对应的转换,搞得头都大了,缠了两天,判断太多,导致太乱,于是多使用函数,发现自己对函数的使用加强了(哈哈,相对于以前,感觉自己有面向对象的思想了,但这是shell)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
#!/bin/bash#mysql数据恢复脚本#Author:jzd#Version:V1.0#back dirback_dir='/back'#full back dayfull_back_day=1#todaytoday=`date +%F`#week dayweek_day=`date +%w`#log filerecovery_log="${back_dir}/mysql_recovery.log"#logfunction log(){ echo "`date` $1" | tee -a ${recovery_log}}#find back dirfunction 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 recoveryfunction allredo(){ log "开始完整备份恢复准备..." innobackupex --apply-log --redo-only $1 &>> ${recovery_log} if [ $? -ne 0 ]; then log "完整恢复准备出错,请检查..." exit 1 fi log "完整备份恢复准备完成"}#incremental recoveryfunction incredo(){ log "开始增量数据恢复准备..." innobackupex --apply-log --redo-only $1 --incremental-dir=$2 &>> ${recovery_log} if [ $? -ne 0 ]; then log "增量数据恢复准备出错,请检查..." exit 1 fi log "增量数据$2恢复准备完成"}#real recoveryfunction 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}fiexit 0 |
Xtrabackup实现Mysql的InnoDB引擎热备份的更多相关文章
- MySQL数据库InnoDB引擎下服务器断电数据恢复
说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...
- 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...
- Linux启用MySQL的InnoDB引擎
前几天公司的一个项目组的同事反应说公司内部的一台Linux服务器上的MySQL没有InnoDB这个引擎,我当时想应该不可能啊,MySQL默认应该 就已经安装了这个引擎的吧,于是上服务器去看了看,发现还 ...
- MySQL中innodb引擎分析(初始化)
MySQL的存储引擎是以插件形式工作的,这应该是MySQL的一大特色了吧! 依据<深入理解MySQL>的内容,5.1版本号时存储引擎的插件化都还不是彻底,确切的说是刚加入的特性.为MySQ ...
- Java面试05|MySQL及InnoDB引擎
1.InnoDB引擎索引 InnoDB支持的索引有以下几种: (1)哈希索引 (2)全文索引 (1)B+树索引 又可以分为聚集索引与辅助索引 索引的创建可以在CREATE TABLE语句中进行,也可以 ...
- Mysql在InnoDB引擎下索引失效行级锁变表锁案例
先做好准备,创建InnoDB引擎数据表,并添加了相应的索引 DROP TABLE IF EXISTS `innodb_lock`; CREATE TABLE `innodb_lock` ( `a` ) ...
- mysql的innodb 引擎 表锁与行锁
innodb 引擎 行锁与表锁 行锁与表锁是基于索引来说的(且索引要生效) 不带索引 (表锁)要全表扫描 1. 执行select @@autocommit; 查看结果 0是不自动提交事务,1是自动提交 ...
- MySQL原理 - InnoDB引擎 - 行记录存储 - Off-page 列
本文基于 MySQL 8 在前面的两篇文章,我们分析了 MySQL InnoDB 引擎的两种行记录存储格式: Compact 格式 Redundant 格式 在这里简单总结下: Compact 格式结 ...
- 【Mysql】InnoDB 引擎中的数据页结构
InnoDB 是 mysql 的默认引擎,也是我们最常用的,所以基于 InnoDB,学习页结构.而学习页结构,是为了更好的学习索引. 一.页的简介 页是 InnoDB 管理存储空间的基本单位,一个页的 ...
随机推荐
- 对于JavaBean+Servlet+SqlServer的代码总结和打包调用
日期:2019.3.24 博客期:049 星期日 说起来我已经说过很多次前台的应用技术了呢!这一次我是要将这一部分打包,做成配套的制作工具: 当前我已经打包成功,想要下载的同学可以进入我的GitHub ...
- LoadRunner学习笔记(三)
一. LR如何监控Windows系统资源 一般通过LR进行压力测试,都需要实时监控服务端的系统资源,我们可以直接在远程连接服务器上面开启任务管理器 或者在控制面板中找到性能计数器来监控,但是为了在L ...
- java爬虫实现爬取百度风云榜Top10
最近在项目中遇到了java和python爬虫进行程序调用和接口对接的问题, 刚开始也是调试了好久才得出点门道. 而后,自己也发现了爬虫的好玩之处,边想着用java来写个爬虫玩玩,虽说是个不起眼的dem ...
- PHP使用urlencode对中文编码时空格、加号的问题
使用urlencode这个函数进行格式化,urlencode函数会把空格编码为为:+ 当然,前端在接收时可以解码后进行替换 + 为空格的方式处理. 但是这样就多做了一步,很麻烦,有的时候我们的数据接口 ...
- Docker使用Mysql镜像命令
本次使用的环境是win10下的hyper-v安装的CentOS7系统 控制台输入命令: docker run -p 3307:3306 --name mysql01 -v $PWD/conf:/etc ...
- SSM框架:解决后台传数据到前台中文乱码问题,使用@ResponseBody返回json 中文乱码
解决方法一:@RequestMapping(value="/getphone",produces = "text/plain;charset=utf-8") / ...
- Nginx 自定义添加Response Headers 修改server
之前说过如何隐藏Response Headers中 X-Powered-By 修改php.ini expose_php = Off service php-fpm reload 隐藏Nginx版本号 ...
- 记忆(缓存)函数返回值:Python 实现
对于经常调用的函数,特别是递归函数或计算密集的函数,记忆(缓存)返回值可以显着提高性能.而在 Python 里,可以使用字典来完成. 例子:斐波那契数列 下面这个计算斐波那契数列的函数 fib() 具 ...
- 译文 - Recommender Systems: Issues, Challenges, and Research Opportunities
REF: 原文 Recommender Systems: Issues, Challenges, and Research Opportunities Shah Khusro, Zafar Ali a ...
- hdu4811-Ball(2013ACM/ICPC亚洲区南京站现场赛)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4811 题目描述: Problem Description Jenny likes balls. He ...