mysql的binlog进行数据恢复

来源:互联网 发布:笔记本怎么用梯子 知乎 编辑:程序博客网 时间:2024/05/22 06:09

如何开启binlog?

    首先我们可以进入mysql输入命令

    show variables like '%bin%'

我们可以通过这个命令来查询关于binlog相关的设置,其中有一个log_bin选项,如果为off,那么证明我们的binlog没有开启,如果为on证明我们的binlog已经开启,开启binlog的方法很简单,只需要打开mysql的配置文件my.ini(也可能是my.cnf),找到log-bin,去掉前面的#号,如果没有该选项,则可以手动添加。

  log-bin=mysql-bin

其中mysql-bin就是日志文件的名称了,日志文件的名称和路径都可以自定义,如果不配置路径和名称,那么该文件会出现在mysql/data目录下,名称为mysql-bin.xxxxxx。

    添加完成后重启mysql,我们就会在mysql/data目录下找到binlog日志文件了,首次使用binlog的时候会出现两个文件,一个是mysql-bin.000001,一个是mysql-bin.index,其中,000001结尾的文件就是我们需要的日志文件,它包含了我们数据库的所有增,改,删操作(查询操作不做记录),以index结尾的文件是索引文件,包含了所有的以000xxx结尾的日志文件。

    开启binlog后mysql会自动为了记录以后增,改,删操作,关于备份操作无需我们手动操作,我们只要在需要恢复数据的时候查找对应的数据即可,由于binlog存储的格式为二进制,因此我们无法直接使用,需要借助mysql提供的工具mysqlbinlog(mysqlbinlog在mysql安装目录下的bin目录下)。初次接触一个命令不知道如何使用的时候,我们可以通过帮助命令查看它如何使用

如何使用mysqlbinlog查询操作记录?

   1.读取所有数据库的操作

[sql] view plain copy
  1. mysqlbinlog /alidata/server/mysql-5.5.40/data/mysql-bin.000001  
通过该命令,我们可以看到该日志文件中记录的所有数据库的增,该,删操作。

    2.查询指定数据库的操作

[sql] view plain copy
  1. mysqlbinlog --database=test /alidata/server/mysql-5.5.40/data/mysql-bin.000001  
通过该命令,我们可以查询数据库名称为test的增,该,删操作

    3.查询指定位置的操作

    binlog每次进行记录的时候都会为其标注一个position,用于标识该操作所在的位置,与之相关的参数为--start-position(开始位置)和--stop-position(结束位置),我们可以通过position进行指定操作的查询。只需要在mysql中使用show binlog events in 'logname'即可,每一行都记录了一条操作,其中Pos就是该操作的start-position,End_log_pos就是stop-position。我们如果需要查询上述图片中的操作,可以使用以下语句:

mysqlbinlog --start-position=4 --stop-position=98 --database=test /alidata/server/mysql-5.5.40/data/mysql-bin.000001

   4.查询指定时间的操作

    除了有位置标识外,binlog还有时间标识,参数为--start-datetime(开始时间)和--stop-datetime(结束时间),如果想要查询某个时间段的操作,可以使用该参数。

[sql] view plain copy
  1. mysqlbinlog --start-datetime="2015-08-08 10:00:00" --stop-datetime="2015-08-08 12:00:00" /alidata/server/mysql-5.5.40/data/mysql-bin.000001  
    常用的查询操作也就这么多了,查询操作不是我们的目的,恢复记录才是我们的目的,一切的查询都是为了恢复。


恢复数据

使用mysqlbinlog进行查询带恢复

mysqlbinlog --start-position=4 --stop-position=98 /alidata/server/mysql-5.5.40/data/mysql-bin.000001 | mysql -u root -p


导出到sql里恢复

mysqlbinlog --database=test /alidata/server/mysql-5.5.40/data/mysql-bin.000001 > /alidata/server/mysql-5.5.40/data/1.sql


注意事项

    1.每当重启mysql的时候,都会自动生成一个新的binlog文件,恢复数据的时候首先确定需要恢复的数据在哪个日志文件中,然后查找对应binlog文件进行数据恢复。

    2.binlog分别记录了一个操作的起始位置Pos和结束位置End_log_pos,当起始位置和终止位置都选择正确的时候,恢复的数据才会正确,尤其是当进行连续的多行记录进行恢复的时候,对于stop-position的选择一定要注意,最后一行的End_log_pos才是我们需要的。

    3.使用show binlog events的时候默认指定的是第一个二进制文件,如果想要查看其它的二进制文件,可以使用show binlog events in 'logname',其中logname是个字符串,不要忘记带上引号,否则会出错。


windoews下查看mysql二进制日志
D:\phpStudy\MySQL\bin\mysqlbinlog.exe D:\phpStudy\MySQL\data\mysql-bin.000003 > C:\Users\hp\Desktop\3.sql

D:\phpStudy\MySQL\bin\mysqlbinlog.exe --database=test D:\phpStudy\MySQL\data\mysql-bin.000002 > C:\Users\hp\Desktop\4.sql

D:\phpStudy\MySQL\bin\mysqlbinlog.exe --start-position=107 --stop-position=273 D:\phpStudy\MySQL\data\mysql-bin.000002 | D:\phpStudy\MySQL\bin\mysql.exe -u root -p


0 0
原创粉丝点击