一、二进制日志简介

MySQL有不同类型的日志,其中二进制文件记录了所有对数据库的修改,如果数据库因为操作不当或其他原因丢失了数据,可以通过二进制文件恢复。

在my.ini文件中设置了log-bin,重新启动MySQL后就开启了二进制日志。数据库每次重新启动(或执行flush logs命令)后,都会生成一个新的二进制日志,如在在my.ini文件中设置了

  1. log-bin=F:\mysqllog\logbin

则数据库第一次启动会生成logbin.000001,第二次启动会生成logbin.000002,第三次启动会生成logbin.000003,......,以此类推。

二、数据恢复实例

1. 为了便于说明,执行flush logs命令,生成一个新的二进制文件;

2. 打开bookstore数据库中的authors表,里面已经有3条数据,在里面新插入两条数据,即第4条和第5条数据;

3. 假设由于操作失误,将第4条和第5条数据删除了;

4. 这时就考虑用二进制文件恢复第4条和第5条数据了,打开二进制文件的路径,发现有很多二进制日志文件,

其中编号最大的000030是最新的,记录了前面所述的记录插入和删除操作;

5. 首先查看一下这个文件,运行以下命令将其转换成文本文件,

打开文本文件,可以看见记录下了记录的插入和删除操作。

  1. /*!40019 SET @@session.max_insert_delayed_threads=0*/;
  2. /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
  3. DELIMITER /*!*/;
  4. # at 4
  5. #150204 20:24:10 server id 1 end_log_pos 107 Start: binlog v 4, server v 5.5.25-log created 150204 20:24:10
  6. # Warning: this binlog is either in use or was not closed properly.
  7. BINLOG '
  8. ag/SVA8BAAAAZwAAAGsAAAABAAQANS41LjI1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  9. AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
  10. '/*!*/;
  11. # at 107
  12. #150204 20:25:40 server id 1 end_log_pos 180 Query thread_id=8 exec_time=0 error_code=0
  13. SET TIMESTAMP=1423052740/*!*/;
  14. SET @@session.pseudo_thread_id=8/*!*/;
  15. SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
  16. SET @@session.sql_mode=1344274432/*!*/;
  17. SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
  18. /*!\C utf8 *//*!*/;
  19. SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
  20. SET @@session.lc_time_names=0/*!*/;
  21. SET @@session.collation_database=DEFAULT/*!*/;
  22. BEGIN
  23. /*!*/;
  24. # at 180
  25. #150204 20:25:40 server id 1 end_log_pos 369 Query thread_id=8 exec_time=0 error_code=0
  26. use bookstore/*!*/;
  27. SET TIMESTAMP=1423052740/*!*/;
  28. INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (4, 'Li', 'Si', 'China')
  29. /*!*/;
  30. # at 369
  31. #150204 20:25:40 server id 1 end_log_pos 557 Query thread_id=8 exec_time=0 error_code=0
  32. SET TIMESTAMP=1423052740/*!*/;
  33. INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (5, 'Wang', 'Wu', 'US')
  34. /*!*/;
  35. # at 557
  36. #150204 20:25:40 server id 1 end_log_pos 584 Xid = 391
  37. COMMIT/*!*/;
  38. # at 584
  39. #150204 20:45:31 server id 1 end_log_pos 657 Query thread_id=8 exec_time=0 error_code=0
  40. SET TIMESTAMP=1423053931/*!*/;
  41. BEGIN
  42. /*!*/;
  43. # at 657
  44. #150204 20:45:31 server id 1 end_log_pos 780 Query thread_id=8 exec_time=0 error_code=0
  45. SET TIMESTAMP=1423053931/*!*/;
  46. DELETE FROM `bookstore`.`authors` WHERE `author_id`='4'
  47. /*!*/;
  48. # at 780
  49. #150204 20:45:31 server id 1 end_log_pos 903 Query thread_id=8 exec_time=0 error_code=0
  50. SET TIMESTAMP=1423053931/*!*/;
  51. DELETE FROM `bookstore`.`authors` WHERE `author_id`='5'
  52. /*!*/;
  53. # at 903
  54. #150204 20:45:31 server id 1 end_log_pos 930 Xid = 407
  55. COMMIT/*!*/;
  56. DELIMITER ;
  57. # End of log file
  58. ROLLBACK /* added by mysqlbinlog */;
  59. /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

6. 开始恢复数据,执行以下命令,

之所以要有一个--stop-pos=584参数,是因为从584开始,就在删除记录了,所以在584就应该停止。执行命令以后,再次打开authors表,可以看见第4、5条数据被恢复了!

MySQL使用二进制日志恢复数据库的更多相关文章

  1. 如何通过Mysql的二进制日志恢复数据库数据

    经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...

  2. mysql根据二进制日志恢复数据/公司事故实战经验

    根据二进制日志恢复 目的:恢复数据,根据二进制日志将数据恢复到今天任意时刻 增量恢复,回滚恢复 如果有备份好的数据,将备份好的数据导入新数据库时,会随着产生二进制日志 先准备一台初始化的数据库 mys ...

  3. mysql使用二进制日志恢复数据

    一.恢复到某个二进制文件 1.开启二进制日志 在mysqld的配置节点下添加如下配置 log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,l ...

  4. MYSQL LOGBIN 数据日志恢复数据库随笔

    查看指定的二进制日志中的事件(MYSQL命令行) mysql> show binlog events in 'binlogfullpath'; 查看二进制日志中的事件(MYSQL命令行) mys ...

  5. mysql学习------二进制日志管理

    MySQL二进制日志(Binary Log)   a.它包含的内容及作用如下:    包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)    包含关于每个更新数据库( ...

  6. MySQL的binlog日志恢复(转)

    binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...

  7. mysql通过data目录恢复数据库

    mysql通过data目录恢复数据库 阅读:次   时间:2010-03-24 06:53:30   字体:[大 中 小]     重装系统后,MySQL服务没有了,但是数据库的文件还在,这个时候我想 ...

  8. SqlServer 通过日志恢复数据库

    前期工作 查看数据属性,确保下条件: 1.数据库属性->选项->恢复模式=完整 2.建好库以后.一个数据库完整的数据备份 3.到出事期间日志没有你间断 4.记录出事的准确时间 一.数据准备 ...

  9. MYSQL使用二进制日志来恢复数据

    mysqlbinlog工具的使用,大家可以看MySQL的帮助手册.里面有详细的用, 在这个例子中,重点是--start-position参数和--stop-position参数的使用. ·--star ...

随机推荐

  1. xamarin UWP平台线程交互问题

    先吐槽一下,xamarin到现在为止,虽然开发一下应用尚可,对于一些简单的app开发使用xamarin-forms方式开发,虽然有一些优势,可以省下开发三个平台共同功能的时间,但是当我们随着项目深入的 ...

  2. Java程序员的日常 —— 《编程思想》持有对象

    集合框架可以说是Java里面必备的知识点了,日常的使用中也会遇到各种情况需要使用到集合.下面就简单介绍下各种集合的使用场景: List List可以看做是数组,实现的方式有两种: ArrayList ...

  3. 8 步搭建 Node.js + MongoDB 项目的自动化持续集成

    任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...

  4. cordova添加platform

    cordova添加platform 一般需要指定版本的 cordova platform add android@4.1

  5. Struts2--ONGL--值栈

    ONGL:用来访问栈里对象属性的语言,通常由Struts标签来解析, 注意:要在接续OGNL的页面加入<%@ taglib prefix="s" uri="/str ...

  6. 设置国内的centos 7 yum源

    本人在帝都,觉得首都在线(yun-idc.com)的yum源速度不错,故选它了.具体操作方法是将以下文件保存到 /etc/yum.repos.d/yun-idc.repo 即可. [base] nam ...

  7. Android中的内存储、外存储概念、文件操作与PC端的有些不同

    其实安卓文件的操作和java在pc环境下的操作并无二致,之所以需要单独讲解是因为安卓系统提供了不同于pc的访问文件系统根路径的api,同时对一个应用的私有文件做了统一的管理.初学者在这部分感到很容易混 ...

  8. [C] 关于表达式求值

    结论是:在一个表达式中,如果两个相邻操作符的执行顺序由它们的优先级决定,如果它们的优先级相同,它们的执行顺序由它们的结合性决定.若出现前述规则描述之外的情形,编译器可以自由决定求值的顺序(只要不违反逗 ...

  9. JAVA之IO文件读写

    IO概述:                                                          IO(Input output)流 作用:IO流用来处理设备之间的数据传输 ...

  10. Windows Azure Virtual Machine (31) 迁移Azure虚拟机

    <Windows Azure Platform 系列文章目录> 为什么要写这篇Blog? 之前遇到过很多客户提问: (1)我之前创建的虚拟机,没有加入虚拟网络.现在需要重新加入虚拟机网络, ...