烂泥:通过binlog恢复mysql备份之前的数据
上一篇文章,我们讲解了如何通过mysql的binlog日志恢复mysql数据库,文章连接为《烂泥:通过binlog恢复mysql数据库》。其中我们提到了的备份数据库要晚与要恢复的数据库时间,即要恢复的数据库在前,而备份的数据库在后。
当时我提到说会单独写一篇文章讲解这个情况,本篇文章我就来介绍如何通过binlog日志恢复比备份数据库早时的数据库状态。我们还是以上篇文章的数据及备份文件为基础,来进行本篇文章的讲解。
ailanni数据库完整备份时,其数据库中有1、2、3、4,这四条数据。而此时mysql总共有三个binlog日志文件:mysql-bin.000001、mysql-bin.000002、mysql-bin.000003。其中在mysql-bin.000001中,我们向ilannitable表中插入两个数据1、2。在mysql-bin.000002中我们向ilannitable表中插入两个数据3、4。
现在我们要求把ailanni数据库恢复到插入数据3后,未插入数据4时的状态。即数据库ailanni中只有数据1、2、3,这三条数据。
分析:要达到上述的要求,我们需要使用到mysql-bin.000002,这个binlog日志文件。然后根据binlog日志恢复数据库使,可以指定pos位置节点的方法,来恢复ailanni数据库。
除此非常重要的是,我们还要先把ailanni数据库先恢复到完整备份时的状态,如果不先把ailanni数据库先恢复到完整备份时的状态,我们在使用binlog日志进行恢复时,系统会报错。
我们需要分以下几个步骤,可以恢复题目要求的ailanni数据库状态。如下:
1、 完整恢复ailanni数据库
2、 删除恢复后ailanni数据库中的全部数据
3、 通过binlog日志恢复ailanni数据库
一、完整恢复ailanni数据库
要完整恢复ailanni数据库,我们可以通过mysql命令来实现。但是在这之前,我们还要就有关ailanni数据库是否存在的情况要说明下。
如果目前mysql数据库服务器上有ailanni这个数据库,那么我们在恢复数据时,就不需要重新创建ailanni数据库。如果目前mysql数据库服务器上没有ailanni这个数据库,那么我们就需要重新创建一个空的ailanni数据库。即该数据库只是一个空的库,里面没有任何表或者其他的元素。
如果不创建ailanni数据库的话,我们在通过mysql命令恢复数据库时,系统就会报错,如下:
现在我们来执行mysql命令导入备份的sql文件,如下:
create database ailanni;
/usr/local/mysql/bin/mysql -uroot -p123456 ailanni</root/ailanni.sql
mysql -uroot -p123456
use ailanni;
select id from ilannitable;
通过上图,我们可以看到ailanni数据库已经完全恢复。
二、删除恢复后ailanni数据库中的全部数据
在第一步中我们已经把ailanni数据库全部恢复,现在我们需要清空ailanni数据库。如下:
delete from ilannitable;
select id from ilannitable;
通过上图,我们可以看到目前ailanni数据库中已经没有数据,是一个空的数据库。
三、通过binlog日志恢复ailanni数据库
第二步已经清空ailanni数据库,这样我们就可以通过mysql的binlog日志来恢复ailanni数据库。
也许你会问我们为什么要先完整恢复ailanni数据库,然后再把ailanni数据库清空?
这个是因为如果我们不先完整恢复ailanni数据库的话,我们在使用binlog进行恢复ailanni数据库时,系统会报错的。如下:
如果我们不清空ailanni数据库的话,你会发下恢复后的ailanni数据库,还是没有达到我们的要求。如下:
所以我们要进行第一、二步的操作。
现在我们来查看mysql-bin.000002文件,以确定ailanni数据库恢复的pos位置节点,如下:
/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000002
注意图中标记出来的数字304,这个就是binlog的pos节点位置。我们可以看到在该pos节点后mysql才执行插入数据4的SQL语句。那么我们只需要把数据恢复这个节点即可。
使用如下命令进行恢复数据,如下:
/usr/local/mysql/bin/mysqlbinlog --stop-position=304 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p123456
通过上图,我们现在可以看到ailanni数据库已经恢复到插入数据3之后,未插入4的状态。现在ailanni数据库中确实只有1、2、3,这三条数据,已经达到我们的要求。
其实我们还可以这样说,目前只有mysql的所有binlog日志,而且还有一个比较完整的数据库备份,那么该如何恢复数据库呢?
按照上述方法也是可以恢复的。
烂泥:通过binlog恢复mysql备份之前的数据的更多相关文章
- MySQL备份和还原数据
MySQL备份和还原数据 导出整个数据库 mysqldump -uroot -p database_name > db_backup.sql 导入整个数据库 mysql -uroot -p da ...
- 烂泥:通过binlog恢复mysql数据库
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识.这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库. 在使用bin ...
- 恢复MySQL数据库删除的数据
在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办? 下面 ...
- mysql备份并转移数据
一.使用mysqldump进行备份 直接输入命令mysqldump会发现提示命令不存在,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下, 自然会找不到命令,并报错.知道了问题 ...
- MySQL 备份表和数据
方法1: Create table new_table_name (Select * from old_table_name); 方法2: 1.先备份表结构和数据#导出命令 -u用户名 -p密码 -h ...
- 关于linux下crontab mysql备份出来的数据为0字节的问题
问题出在计划任务所执行的脚本上! 脚本中的调用的指令应该都写全路径~ 实例: # crontab -c 编辑下的内容 30 18 * * * /root/backup.sh 意思为:每天18:30执行 ...
- (转)解锁MySQL备份恢复的4种正确姿势
本文根据DBAplus社群第104期线上分享整理而成. 原文:http://dbaplus.cn/news-11-1267-1.html 讲师介绍 冯帅 点融网高级DBA 获有Oracle OCM ...
- MySQL备份恢复全实战
一. 简介 1. 增量备份 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味着,第一次增量 备份的对象是进行全备后所产生的增加和修改的文件; ...
- (4.10)mysql备份还原——利用binlog+全备恢复误删表【不推荐使用】
关键误操作:mysql误删除 1.备份+binlog恢复数据 [1.1]场景:不小心误删除某张表 [1.2]解决方法:在另外一台机器,恢复全库+日志,然后导出删除的表,再插入会生产库. [1.3]案例 ...
随机推荐
- 容器--HashMap
一.前言 看了下上一篇博客已经是半个月前,将近20天前了,很惭愧没有坚持下来,这期间主要是受奥运会和王宝强事件的影响,另外加上HashMap中关于rehash的实现比较不好理解,所以就一拖再拖.如果能 ...
- JProfiler 8下载地址和注册码
JProfiler---- 一个很好的java性能监控工具,现在附上下载地址和注册码,此破解版仅供学习交流使用, 其他用途请购买正版授权!!!windows x64 zip下载地址:http://do ...
- 关于javascript的一些知识以及循环
javascript的一些知识点:1.常用的五大浏览器:chrome,firefox,Safari,ie,opera 2.浏览器是如何工作的简化版:3.Js由ECMAjavascript;DOM;BO ...
- <记录学习>(前三天)京东页面各种注意点
培训学校第1到3天先学习HTML现在流行的是HTML5,目前学习的是HTML5规范.(给有基础一定的人学习)前三天学习的是京东页面的编写,和以前写的不同,页面看上去和自己写的一样,但老师讲的还是有很多 ...
- 【精心推荐】几款极好的 JavaScript 文件上传插件
文件上传功能作为网页重要的组成部分,几乎无处不在,从简单的单个文件上传到复杂的批量上传.拖放上传,需要开发者花费大量的时间和精力去处理,以期实现好用的上传功能.这篇文章向大家推荐几款很棒的 JavaS ...
- 高性能javascript学习笔记系列(1) -js的加载和执行
这篇笔记的内容主要涉及js的脚本位置,如何加载js脚本和脚本文件执行的问题,按照自己的理解结合高性能JavaScript整理出来的 javascript是解释性代码,解释性代码需要经历转化成计算机指令 ...
- angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
一.从function JQLite(element)函数开始. function JQLite(element) { if (element instanceof JQLite) { //情况1 r ...
- jQuery.extend()方法和jQuery.fn.extend()方法源码分析
这两个方法用的是相同的代码,一个用于给jQuery对象或者普通对象合并属性和方法一个是针对jQuery对象的实例,对于基本用法举几个例子: html代码如下: <!doctype html> ...
- Mongodb的备份,恢复,导入与导出(cmd命令行实现)
要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下命令均在cmd ...
- CoreDataManager-OC版-兼容iOS10以前的版本
头文件: #import <Foundation/Foundation.h> #import <CoreData/CoreData.h> /** CoreData管理器 */ ...