`
OrangeHolic
  • 浏览: 260921 次
  • 来自: 北京
社区版块
存档分类
最新评论

利用mysql的binlog恢复数据

阅读更多
MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个:
* 数据回复
* 主从数据库。用于slave端执行增删改,保持与master同步。

1.开启binary log功能

     需要修改mysql的配置文件,本篇的实验环境是win7,配置文件为mysql安装目录\MySQL Server 5.1下的my.ini,添加一句log_bin = mysql_bin即可
     eg:
     [mysqld]
             ......
             log_bin = mysql_bin
             ......
       log_bin是生成的bin-log的文件名,后缀则是6位数字的编码,从000001开始,按照上面的配置,生成的文件则为:
             mysql_bin.000001
             mysql_bin.000002
             ......
 
    配置保存以后重启mysql的服务器,用show variables like  '%bin%'查看bin-log是否开启,如图: 


2.查看产生的binary log

   bin-log因为是二进制文件,不能通过记事本等编辑器直接打开查看,mysql提供两种方式查看方式,在介绍之前,我们先对数据库进行一下增删改的操作,否则log里边数据有点空。
   create table bin( id int(10) primary key auto_increment,name varchar(255));(测试前我已经建表)
   insert into bin(name) values ('orange');

     1.在客户端中使用  show binlog events in 'mysql_bin.000001'  语句进行查看,为了排序美观,可以在结尾加\G使结果横变纵,此时结尾无需加;语句结束符。
      eg:
mysql> show binlog events in 'mysql_bin.000001'\G
...............省略...............
*************************** 3. row ***************************
   Log_name: mysql_bin.000001
        Pos: 174
Event_type: Intvar
  Server_id: 1
End_log_pos: 202
      Info: INSERT_ID=2
*************************** 4. row ***************************
   Log_name: mysql_bin.000001
        Pos: 202
Event_type: Query
  Server_id: 1
End_log_pos: 304
       Info: use `test`; insert into bin(name) values ('orange')
*************************** 5. row ***************************
...............省略...............
Log_name:此条log存在那个文件中,从上面可以看出这2条log皆存在与mysql_bin.000001文件中。
Pos:log在bin-log中的开始位置
Event_type:log的类型信息
Server_id:可以查看配置中的server_id,表示log是那个服务器产生
End_log_pos:log在bin-log中的结束位置
Info:log的一些备注信息,可以直观的看出进行了什么操作

2.用mysql自带的工具mysqlbinlog,这是我们就需要知道bin-log存在硬盘的什么位置,win7默认存在C:\ProgramData\MySQL\MySQL Server 5.1\data文件夹下面,如果没有此文件夹,那我们可以通过配置文件中的  datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/" 定位,如果还没有,那我就会说“各个系统的搜索功能都做的不错!”。这种查看方式就没那个美观了,如下

C:\ProgramData\MySQL\MySQL Server 5.1\data>mysqlbinlog mysql_bin.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#121015 16:35:56 server id 1  end_log_pos 106   Start: binlog v 4, server v 5.1.51-community-log created 121015 16:35:56 at startup
ROLLBACK/*!*/;
BINLOG '
7Mp7UA8BAAAAZgAAAGoAAAAAAAQANS4xLjUxLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAADsyntQEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
# at 106
#121015 16:36:51 server id 1  end_log_pos 174   Query   thread_id=2     exec_time=0     error_code=0
SET TIMESTAMP=1350290211/*!*/;
SET @@session.pseudo_thread_id=2/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@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 174
#121015 16:36:51 server id 1  end_log_pos 202   Intvar
SET INSERT_ID=3/*!*/;
# at 202
#121015 16:36:51 server id 1  end_log_pos 309   Query   thread_id=2     exec_time=0     error_code=0
use test/*!*/;
SET TIMESTAMP=1350290211/*!*/;
insert into bin(name) values('xishizhaohua')
/*!*/;
# at 309
#121015 16:36:51 server id 1  end_log_pos 336   Xid = 28
COMMIT/*!*/;
# at 336
#121015 16:37:25 server id 1  end_log_pos 379   Rotate to mysql_bin.000002  pos: 4
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

虽然排版有点乱,但从图中我们可以得到更多信息,如时间戳,自增的偏移,是否自动提交事务等信息。如下图为从中提取的一部分。


3.利用bin_log恢复数据

    1.最长用的就是回复指定数据端的数据了,可以直接恢复到数据库中:
    mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 |mysql -uroot -p123456
      亦可导出为sql文件,再导入至数据库中:
      mysqlbinlog  --start-date="2012-10-15 16:30:00" --stop-date="2012-10-15 17:00:00" mysql_bin.000001 >d:\1.sql
      source d:\1.sql
      2.指定开始\结束位置,从上面的查看产生的binary log我们可以知道某个log的开始到结束的位置,我们可以在恢复的过程中指定回复从A位置到B位置的log.需要用下面两个参数来指定:
    --start-positon="50" //指定从50位置开始
    --stop-postion="100"//指定到100位置结束

   最后介绍几个bin_log的操作:
   1.产看最后一个bin日志文件是那个,现在位置

  2.启用新的日志文件,一般备份完数据库后执行

3.清空现有的所用bin-log


 

  

     
 
       



  • 大小: 12.3 KB
  • 大小: 12.1 KB
  • 大小: 4.2 KB
  • 大小: 13.1 KB
  • 大小: 12.7 KB
分享到:
评论

相关推荐

    MySQL Binlog Digger 4.8.0

    总结来说,MySQL Binlog Digger是MySQL数据库管理员的重要工具,它提供了一种高效的方式来检查和利用binlog进行数据恢复,同时通过不断更新和优化,确保了在不同场景下的稳定性和效率。在处理数据恢复问题时,这款...

    MySQL利用binlog恢复库表

    ### MySQL利用binlog恢复库表 #### 一、利用binlog恢复库表的背景与重要性 在数据库管理中,由于误操作等...需要注意的是,在生产环境中使用binlog恢复数据时,一定要小心谨慎,确保不会对现有数据造成不必要的影响。

    利用binlog还原sql或者恢复数据python工具

    本篇文章将详细探讨如何使用Python工具binlog2sql来从binlog文件中还原SQL语句或恢复数据。 **一、binlog2sql工具介绍** binlog2sql是一款开源的Python工具,其主要功能是从MySQL的binlog文件中解析出SQL语句,...

    mysql数据库恢复 binlog2sql数据库恢复

    4. 分析和恢复数据。打开output.sql文件,查看SQL语句,找出需要恢复或撤销的操作。如果要撤销操作,可以直接在另一个测试环境中执行这些SQL的逆操作,或者根据需要编写脚本来实现。 5. 在确保无误后,将恢复操作...

    基于 mysql-binlog-connector-java 实现增量数据的收集.zip

    `mysql-binlog-connector-java` 是一个开源库,它允许Java应用程序实时读取MySQL的binlog事件,从而实现增量数据的收集。本资源包主要探讨了如何利用此库在Spring Boot项目中实现这一功能。 首先,我们需要理解...

    MySQL 两种恢复数据的方法

    使用这种方式的前提必须有最近的备份集或者知道出现误操作起始的binlog 位点或者GTID,利用备份集恢复到中间的机器上,然后利用MySQL的slave 特性 START SLAVE [SQL_THREAD] UNTIL MASTER_LOG_FILE = ‘log_n

    基于Python实现用于解析和转换 MySQL 二进制日志(binlog)的工具源码

    MySQL二进制日志(Binary Log,简称binlog)是MySQL数据库系统中记录所有更改数据库数据的事件序列的重要工具,主要用于数据恢复、主从复制等场景。本篇将深入探讨如何利用Python语言来解析和转换MySQL的binlog,...

    分析 MySQL 的 binlog 日志的工具

    MySQL的binlog(二进制日志)是数据库系统中非常关键的一个组件,它记录了所有改变数据库状态的事务操作,对于数据恢复、主从复制、审计和数据分析等任务至关重要。今天我们将深入探讨如何利用binlog进行分析,特别...

    MySQL Binlog Digger 4.4.zip

    二进制日志是MySQL数据库系统中记录所有更改数据的事件序列,这对于数据恢复、数据同步以及数据库审计至关重要。MySQL Binlog Digger 4.4版本提供了一个用户友好的界面,使得开发者和DBA能够更容易地理解和利用这些...

    mysql恢复数据常用方法

    以下是一个实际的操作示例,用于演示如何使用binlog恢复误删的数据。 1. **环境准备**:假设MySQL数据库每晚12点自动完全备份。 2. **误操作发生**:某天上午9点,一位同事不小心删除了一个名为`ops`的数据库。 3. ...

    mysql根据日志恢复数据详细步骤

    本文将详细介绍如何利用MySQL的二进制日志(Binlog)来恢复丢失的数据,并通过具体案例进行说明。 #### 二、基础知识介绍 1. **二进制日志(Binlog)** - **概念**:二进制日志是MySQL的一种日志类型,它记录了...

    mysql通过data文件夹恢复数据和存储过程的方法

    ### MySQL通过Data文件夹恢复数据和存储过程的方法 在MySQL数据库管理中,有时我们需要从data文件夹中恢复数据和存储过程。这种情况可能出现在多种场景下,例如:误删除了重要的数据库对象、数据库出现故障需要紧急...

    Linux上通过binlog文件恢复mysql数据库详细步骤

    在数据出错后,我们可以通过以下步骤利用binlog恢复: 1. **停止MySQL服务**:防止新的写入操作覆盖binlog中的关键信息。 2. **找到出错前的最新binlog文件和位置**:可以通过`SHOW BINLOG EVENTS`命令查找错误发生...

    Mysql的Binlog数据恢复:不小心删除数据库详解

    当需要从Binlog恢复数据时,首先要确定数据丢失的时间点,然后找到那个时间点之前的最后一个完整事务。这可以通过`mysqlbinlog`工具来完成,例如`mysqlbinlog --start-position=0 --stop-position=500 mysql-bin....

    Binlog数据恢复,生成反向SQL语句

    4. **如何使用binlog恢复数据?** 数据恢复通常涉及以下步骤: - **获取binlog文件**:确定需要恢复的时间点,找到相应的binlog文件。 - **解析binlog**:使用工具如`mysqlbinlog`来解析binlog文件,将其转化为可...

    MySQL 数据库误删除后的数据恢复操作说明(详细)

    特别是在面对如MySQL这样的关系型数据库管理系统时,一旦发生误删除的情况,如何有效地恢复数据成为了技术人员必须掌握的一项技能。本文将详细介绍在遇到MySQL数据库误删除的情况下,如何通过备份文件和binlog文件...

    MySQL执行delete误删除数据恢复

    本文将重点介绍如何利用MySQL的二进制日志(binlog)以及my2sql工具来恢复数据。 首先,一旦发现误删除,首要任务是立即停止对数据库的任何写入操作,防止新数据覆盖已被删除的数据。这为恢复提供了可能的空间。如果...

Global site tag (gtag.js) - Google Analytics