mysql binlog恢复数据实战
在前面,我们了解了mysql binlog日志的作用以及使用方法: http://www.php20.cn/article/237
在后面讲到了,可以通过binlog进行恢复数据,那么,具体步骤是怎么样的呢?
数据库备份
数据库恢复的先决条件是,定时备份数据库,缩小binlog恢复范围.首先我们备份测试数据库数据:
|
1
|
mysqldump -uroot -p --database test > testBackSql.sql |
假定它为最后一次备份数据.
test数据库,test数据表最后一个id为164

新增测试数据
通过mysql存储过程,写入测试新的测试数据
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
BEGINDECLARE num INT;SET num=1;WHILE 1 DO INSERT INTO `test`(`name`, `age`, `sex`)VALUES ( CONCAT('name:', num), FLOOR(1 +(RAND() * 40)), 1 );SET num = num + 1;SELECT SLEEP(0.01);END WHILE;END |
插入一段时间后,直接删除整个数据库,最后id为367 :

数据恢复
在上面的操作中,我们备份了数据为164 id之前的所有数据,插入数据到了367之后被删库.假设我们并不知道id到了367.开始使用binlog分析日志:
首先使用 flush logs; 命令刷新二进制日志
|
1
|
flush logs; |
刷新二进制的目的为:确保在刷新日志之前的binlog都为正常数据操作(程序正常更改).
刷新后,新的binlog用于做恢复数据时的记录,
因为当执行备份文件恢复数据和binlog恢复时,都会产生新的binlog,不要和原来的数据进行冲突.
获取binlog日志列表
|
1
2
3
4
5
6
7
8
9
10
|
mysql> show master logs;+------------------+-----------+| Log_name | File_size |+------------------+-----------+| mysql-bin.000001 | 77183 || mysql-bin.000002 | 120 |+------------------+-----------+2 rows in set (0.00 sec)mysql> |
分析各个日志区间
查询000001日志
|
1
|
/www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001 |more |

查询000002日志
|
1
|
/www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000002 |more |

很明显,000002没有删库的那条记录,那么代表备份到删库这段时间的binlog日志都存在000001
通过此开始时间,可以判断出,000001 binlog记录了备份后的所有数据.(如果涉及多个binlog,需要执行多个binlog恢复日志)
通过查询binlog,获取到最后恢复点:
|
1
|
/www/server/mysql/bin/mysqlbinlog /www/server/data/mysql-bin.000001 |tail -50 |

将原有备份数据恢复:
|
1
|
cat testBackSql.sql |mysql -uroot -p |

备份数据已经恢复了,开始恢复二进制数据.
|
1
|
/www/server/mysql/bin/mysqlbinlog --stop-position=77066 /www/server/data/mysql-bin.000001| mysql -uroot -p |

mysql数据恢复成功.
其他
由于时间限制,关于恢复数据中,需要获取到初始恢复位置(也就是备份数据之后的那个位置,可通过--start-datetime=datetime 参数进行定位)
然后通过--start-position=N 参数进行设置初始恢复点,进行正确的数据恢复
本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn
mysql binlog恢复数据实战的更多相关文章
- MySql binlog恢复数据
1. 直接导入数据库 mysqlbinlog --database=testdb mysql-bin. | mysql -uroot -f 2. 导出成SQL文 (1) 从binlog输出为SQL m ...
- MySQL 5.7 - 通过 BINLOG 恢复数据
日常开发,运维中,经常会出现误删数据的情况.误删数据的类型大致可分为以下几类: 使用 delete 误删行 使用 drop table 或 truncate table 误删表 使用 drop dat ...
- Mysql binlog备份数据及恢复数据,学会这个,我在也不怕删库跑路啦~
导读 我一直都主张,技多不压身(没有学不会的技术,只有不学习的人),多学一项技能,未来就少求人一次.网上经常听到xxx删库跑路,万一真的遇到了,相信通过今天的学习,也能将数据再恢复回来~~~ 当然啦, ...
- 不小心删除数据--利用MySQL的binlog恢复数据
MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...
- Mysql使用binlog恢复数据解决误操作问题的两种方法
为保证没有其他参数配置影响,重新安装配置了一台最小化安装的CentOS7虚拟机 1. 基础知识 安装mysql5.6数据库Mysql binlog初步理解 2. 配置mysql 开启binlog.修 ...
- 利用mysql的binlog恢复数据
MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...
- mysql利用binlog恢复数据详细例子
模拟数据恢复的案例 有些时候脑瓜就会短路,难免会出错 场景:在生产环境中,我们搭建了mysql主从,备份操作都是在从备份数据库上 前提:有最近一天或者最近的全备 或者最近一天相关数据库的备份 最重要的 ...
- mysql利用binlog恢复数据
需求:需要给开发提供一个2018年9月30号的数据,按照我们公司正常备份策略来说,直接找到对应时间的备份数据,解压导入即可,恰好这个时间节点的数据没有,只备份到2018年9月25号的,糟糕了吧 咋办呢 ...
- MySQL 二进制文件恢复数据基础版本
先来一段 自行体会 #---------------------------------------------------------------------------------- #模拟通过b ...
随机推荐
- Django(35)Django请求生命周期分析(超详细)
Django请求生命周期分析 1.客户端发送请求 在浏览器输入url地址,例如www.baidu.com,浏览器会自动补全协议(http),变为http://www.baidu.com,现在部分网站都 ...
- Django(37)配置django日志
前言 django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪.错误代码之类的详细信息. ...
- 基于Jira的运维发布平台的设计与实现
作者:乔克 公众号:运维开发故事 上线发布是运维的日常工作,常见的发布方式有: 手动发布 Jenkins发布平台 Gitlab CI ...... 除此之外还有需要开源软件,他们都有非常不错的发布管理 ...
- 密码学系列之:碰撞抵御和碰撞攻击collision attack
密码学系列之:碰撞抵御和碰撞攻击collision attack 简介 hash是密码学和平时的程序中经常会用到的一个功能,如果hash算法设计的不好,会产生hash碰撞,甚至产生碰撞攻击. 今天和大 ...
- C/C++语言编程的隐患!
C/C++语言编程的隐患! 本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内.内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决 ...
- 重新整理 mysql 基础篇————— mysql 事务[三]
前言 简单整理一下事务. 正文 事务有四大特性: 1.原子性(atomicity) 一个事务必须被视为一个不可分割的最小单元. 2.一致性(consistency) 数据库总是从一个一致性的状态转换到 ...
- Netty 框架学习 —— ByteBuf
概述 网络数据的基本单位总是字节,Java NIO 提供了 ByteBuffer 作为它的字节容器,但这个类的使用过于复杂.Netty 的 ByteBuf 具有卓越的功能性和灵活性,可以作为 Byte ...
- 又见 xcrun: error: invalid active developer path 错误
每次升级完macOS都会被 Xcode command line tools missing xcrun 问候一遍,也是挺烦的. 这个春节过光顾着吃喝玩乐,过的蛮颓废的,感觉再也追不上朋友圈各位大佬了 ...
- (1)http基础
HTTP服务基础 • 基于 B/S (Browser/Server)架构的网页服务– 服务端提供网页– 浏览器下载并显示网页 • Hyper Text Transfer Protocol,超文本传输协 ...
- jmeter+ant+jenkins框架搭建问题
工具介绍: jmeter 接口编写,调试,执行. ant Ant是Java的生成工具,都是用来编译.生成:Ant的主要目的就是把你想做的事情自动化,不用你手动一步一步做,因为里面内置了java ...