MySQL使用二进制日志恢复数据库
一、二进制日志简介
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使用二进制日志恢复数据库的更多相关文章
- 如何通过Mysql的二进制日志恢复数据库数据
经常有网站管理员因为各种原因和操作,导致网站数据误删,而且又没有做网站备份,结果不知所措,甚至给网站运营和盈利带来负面影响.所以本文我们将和大家一起分享学习下如何通过Mysql的二机制日志(binlo ...
- mysql根据二进制日志恢复数据/公司事故实战经验
根据二进制日志恢复 目的:恢复数据,根据二进制日志将数据恢复到今天任意时刻 增量恢复,回滚恢复 如果有备份好的数据,将备份好的数据导入新数据库时,会随着产生二进制日志 先准备一台初始化的数据库 mys ...
- mysql使用二进制日志恢复数据
一.恢复到某个二进制文件 1.开启二进制日志 在mysqld的配置节点下添加如下配置 log-bin="E:/Mysql57BinLog/binlog"(windows下的路径,l ...
- MYSQL LOGBIN 数据日志恢复数据库随笔
查看指定的二进制日志中的事件(MYSQL命令行) mysql> show binlog events in 'binlogfullpath'; 查看二进制日志中的事件(MYSQL命令行) mys ...
- mysql学习------二进制日志管理
MySQL二进制日志(Binary Log) a.它包含的内容及作用如下: 包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE) 包含关于每个更新数据库( ...
- MySQL的binlog日志恢复(转)
binlog 基本认识 MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日 ...
- mysql通过data目录恢复数据库
mysql通过data目录恢复数据库 阅读:次 时间:2010-03-24 06:53:30 字体:[大 中 小] 重装系统后,MySQL服务没有了,但是数据库的文件还在,这个时候我想 ...
- SqlServer 通过日志恢复数据库
前期工作 查看数据属性,确保下条件: 1.数据库属性->选项->恢复模式=完整 2.建好库以后.一个数据库完整的数据备份 3.到出事期间日志没有你间断 4.记录出事的准确时间 一.数据准备 ...
- MYSQL使用二进制日志来恢复数据
mysqlbinlog工具的使用,大家可以看MySQL的帮助手册.里面有详细的用, 在这个例子中,重点是--start-position参数和--stop-position参数的使用. ·--star ...
随机推荐
- java gc的考察
参考http://www.cnblogs.com/mazj611/p/3481610.html 看了很多博客.书, 仍然有所不懂.很多看过即忘记.实在要不得. 我们可以通过jstat获取gc情况 js ...
- nginx负载下站点错误响应会导致其他节点重复响应问题的解决过程
目录 前言 问题来了 问题又来了 问题分析 困惑 转机 后续 前言: 这是我上周工作过程中的一次解决问题的过程.解决的是nginx负载下站点错误响应导致其他节点重复响应. 我在整理这个记叙文时,在给这 ...
- swift 创建桥接头文件
1,创建iOS 下source模块里的header file 文件,这个文件要注意命名的规则:xxx-Brigding-Header.h 2,到build setting 里 Swift Compil ...
- 360路由器c301最新固件支持万能中继
360路由器c301现在已经停产了.出厂的固件是360_301_0.7.3.8.这个版本不支持中继.5G信号.本文主要介绍如何刷最新固件以及设置万能中继. 本文为作者原创,发表在博客园:http:// ...
- java基础 数组15
15.找出如下数组中最大的元素和最小的元素, a[][]={{3,2,6},{6,8,2,10},{5},{12,3,23}}
- vb6里面dim和set的区别
dim是作用于变量 声明变量并分配存储空间 set作用于对象 将对象引用赋给变量或属性 例子: dim A as collection set A=new collection 等效于 di ...
- 为大家分享一个 Ajax Loading —— spin.js
我们在做Ajax 异步请求的时候,一般都会利用一个动态的 Gif 小图片来制作一个Ajax Loading ,以便增加用户体验. 今天在网上发现了一个 Spin.js ,该 js 脚本压缩后5k,可以 ...
- PhoneGap介绍及简单部署
一.什么是PhoneGap: PhoneGap是一个自由开放源码的开发工具和框架,允许利用HTML + JavaScript + CSS的强大功能在多个手机平台上开发程序,开发出来的程序经过在各自的平 ...
- 【原创】Newlife.XCode的常见功能使用(一)查询与数据初始化
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www ...
- 寻找表达式(dfs)
题目来源:微策略2013年校园招聘笔试题 题目描述: 现在有一个序列123......N,其中N介于3和15之间,要求在序列之间加入+.-或者空格,使得该序列组成的数学表达式的运算结果为0. 输入: ...