一、二进制日志简介

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

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

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. 首先查看一下这个文件,运行以下命令将其转换成文本文件,

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

/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#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
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
ag/SVA8BAAAAZwAAAGsAAAABAAQANS41LjI1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAVAAEGggAAAAICAgCAA==
'/*!*/;
# at 107
#150204 20:25:40 server id 1 end_log_pos 180 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1423052740/*!*/;
SET @@session.pseudo_thread_id=8/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1344274432/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8 *//*!*/;
SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 180
#150204 20:25:40 server id 1 end_log_pos 369 Query thread_id=8 exec_time=0 error_code=0
use bookstore/*!*/;
SET TIMESTAMP=1423052740/*!*/;
INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (4, 'Li', 'Si', 'China')
/*!*/;
# at 369
#150204 20:25:40 server id 1 end_log_pos 557 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1423052740/*!*/;
INSERT INTO `bookstore`.`authors` (`author_id`, `author_last`, `author_first`, `country`) VALUES (5, 'Wang', 'Wu', 'US')
/*!*/;
# at 557
#150204 20:25:40 server id 1 end_log_pos 584 Xid = 391
COMMIT/*!*/;
# at 584
#150204 20:45:31 server id 1 end_log_pos 657 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1423053931/*!*/;
BEGIN
/*!*/;
# at 657
#150204 20:45:31 server id 1 end_log_pos 780 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1423053931/*!*/;
DELETE FROM `bookstore`.`authors` WHERE `author_id`='4'
/*!*/;
# at 780
#150204 20:45:31 server id 1 end_log_pos 903 Query thread_id=8 exec_time=0 error_code=0
SET TIMESTAMP=1423053931/*!*/;
DELETE FROM `bookstore`.`authors` WHERE `author_id`='5'
/*!*/;
# at 903
#150204 20:45:31 server id 1 end_log_pos 930 Xid = 407
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!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. 为 Exchange 服务器编写自定义的反垃圾插件

    Exchange 2010 的 Edge Transport 包含了一些 Anti-spam 的 Feature,如图: 都开启了,但是呢,还是会有漏网之鱼,而且把这些邮件自己列为 Junk 也起不了 ...

  2. AngularJS快速入门指南14:数据验证

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  3. C++ static

    本文主要记录的C++中static的一些内容,内容简单,仅仅作为梳理一下知识,如有错误请留言指出. static的作用 在函数体,一个被声明为static的变量,在这一函数被调用的过程里,其数值维持不 ...

  4. MVVM架构~knockoutjs系列之为validation.js扩展minLength和maxLength

    返回目录 为什么要对minLength和maxLength这两个方法进行扩展呢,是因为这样一个需求,在用户注册时,可以由用户自己决定他们输入的字符,中文,英文,数字均可,这样做了之后,使用户的体验更好 ...

  5. 360路由器c301最新固件支持万能中继

    360路由器c301现在已经停产了.出厂的固件是360_301_0.7.3.8.这个版本不支持中继.5G信号.本文主要介绍如何刷最新固件以及设置万能中继. 本文为作者原创,发表在博客园:http:// ...

  6. Cocos2d-x 3.X手游开发实例详解

    Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...

  7. JS checkbox 全选 全不选

    /* JS checkbox 全选 全不选 Html中checkbox: <input type="checkbox" name="cbx" value= ...

  8. SSM环境搭建(接口编程方式)

    一直用ssm在开发项目,之前都是直接copy别人的项目,今天趁着项目刚刚交付,自己搭建一下ssm环境,做个记录 一.创建项目.引入jar包,因为版本不一样,就不贴出这部分的内容了.个人平时的习惯是,先 ...

  9. 处于同一个域中的两台Sql server 实例无法连接

    处于同一个域中的两台Sql server 实例无法连接,报的错误信息如下: A network-related or instance-specific error occurred while es ...

  10. OOCSS入门学习

    对于面向对象大家肯定都有多多少少的了解,这里所说的OOCSS就是说面向对象的CSS,得说明的是OOCSS并不是一门新语言也不是什么库,而是一种概念和javascript面向对象一样. 可能你这样写过C ...