本文由秀依林枫提供友情赞助,首发于烂泥行天下

上一篇文章,我们讲解了如何通过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备份之前的数据的更多相关文章

  1. MySQL备份和还原数据

    MySQL备份和还原数据 导出整个数据库 mysqldump -uroot -p database_name > db_backup.sql 导入整个数据库 mysql -uroot -p da ...

  2. 烂泥:通过binlog恢复mysql数据库

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在上一篇文章,我们讲解了有关mysql的binlog日志的基础知识.这篇文章,我们来讲解如何通过mysql的binlog日志来恢复数据库. 在使用bin ...

  3. 恢复MySQL数据库删除的数据

    在日常运维工作中,对于数据库的备份是至关重要的!数据库对于网站的重要性使得我们对 MySQL 数据库的管理不容有失!然而是人总难免会犯错误,说不定哪天大脑短路了,误操作把数据库给删除了,怎么办? 下面 ...

  4. mysql备份并转移数据

    一.使用mysqldump进行备份 直接输入命令mysqldump会发现提示命令不存在,是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下, 自然会找不到命令,并报错.知道了问题 ...

  5. MySQL 备份表和数据

    方法1: Create table new_table_name (Select * from old_table_name); 方法2: 1.先备份表结构和数据#导出命令 -u用户名 -p密码 -h ...

  6. 关于linux下crontab mysql备份出来的数据为0字节的问题

    问题出在计划任务所执行的脚本上! 脚本中的调用的指令应该都写全路径~ 实例: # crontab -c 编辑下的内容 30 18 * * * /root/backup.sh 意思为:每天18:30执行 ...

  7. (转)解锁MySQL备份恢复的4种正确姿势

    本文根据DBAplus社群第104期线上分享整理而成. 原文:http://dbaplus.cn/news-11-1267-1.html 讲师介绍   冯帅 点融网高级DBA 获有Oracle OCM ...

  8. MySQL备份恢复全实战

    一. 简介 1. 增量备份 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味着,第一次增量 备份的对象是进行全备后所产生的增加和修改的文件; ...

  9. (4.10)mysql备份还原——利用binlog+全备恢复误删表【不推荐使用】

    关键误操作:mysql误删除 1.备份+binlog恢复数据 [1.1]场景:不小心误删除某张表 [1.2]解决方法:在另外一台机器,恢复全库+日志,然后导出删除的表,再插入会生产库. [1.3]案例 ...

随机推荐

  1. 2016 年沈阳网络赛---QSC and Master(区间DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5900 Problem Description Every school has some legend ...

  2. 放弃OT了,找了个新框架ThinkCMF

    放弃OT了,找了个新框架ThinkCMF,感觉还不错,用用看. 选择OT的原因: 1. OT基于ThinkPHP 2. OT对ThinkPHP进行了封装,使得开发应用更加简单 3. yershop应用 ...

  3. php中的常用数组函数(八) 排序函数汇总(sort、rsort、usort、asort、uasort、arsort、ksort、uksort、krsort、natsort、natcasesort、array_multisort)

    测试环境:php5.3.29 sort_flags 可以用以下值改变排序的行为: 排序类型标记: SORT_REGULAR - 正常比较单元(不改变类型) SORT_NUMERIC - 单元被作为数字 ...

  4. Atitit.提升语言可读性原理与实践

    Atitit.提升语言可读性原理与实践 表1-1  语言评价标准和影响它们的语言特性1 1.3.1.2  正交性2 1.3.2.2  对抽象的支持3 1.3.2.3  表达性3 .6  语言设计中的权 ...

  5. 转载java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.spinner/com.example.spinner.MainActivity}: java.lang.NullPointerException

    今天学习Android开发突然遇到了这个问题,查阅了很多资料,并且对集中原因进行了分析. 错误信息字符串:java.lang.RuntimeException: Unable to start act ...

  6. 使用mysql的长连接

    有个资料看得我云里雾里的.现在用自己的言语来总结一下,写文字,能够加深自己的理解.也会在写的过程中帮助自己发现理解方面瑕疵,继续查资料求证. 短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与 ...

  7. Java 经典实例:自定义迭代器

    编写自己的Iterator,实现Iterator接口,这里多说一句,实现Iterable后,可以用"foreach"循环遍历你的对象. import java.util.Itera ...

  8. IClient for js开发之地图的加载

    进行web开发之前首先需要安装IServer以及iClient for JavaScript的开发包.在这两中都具备的前提下进行第一步,如何调用IServer中发布的服务 调用iServer 中发布的 ...

  9. C#添加dll引用后,添加命名空间出错的解决方案

    原因:类库dll的目标框架与项目的目标框架不一致造成的,右键单击项目project--〉属性 ---〉Application选项卡下有“目标框架”Target Framewiork,  遇到的是类库的 ...

  10. SharePoint 2013 配置基于表单的身份认证

    前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...