【binlog】恢复Mysql库表

  • A+
所属分类:安全闲碎

一、了解binlog

【binlog】恢复Mysql库表
【binlog】恢复Mysql库表

     Binlog是mysql的二进制日志,以事件形式记录mysql数据库的所有增删改的操作以及这些操作的执行时间。Binlog记录mysql的数据变更,目的是复制和恢复,故在mysql主从复制和数据恢复中能起到很大的作用。Binlog日志有三种模式:

                             ●Row(行模式)

                             ●Statement(默认模式)

                             ●Mixed(自动模式)

    Row模式会记录每一行数据被修改的形式;Statement模式只记录语句;Mixed模式会根据执行的每一条具体的sql语句来区分对待记录的日志格式,也就是在Statement和Row之间选择一种。

二、开启binlog

【binlog】恢复Mysql库表

     要产生Binlog日志首先要确定数据库是否开启Binlog服务,Binlog服务服务是默认不开启的,需要手动开启。

查询命令:Show variables like ‘log_%’

【binlog】恢复Mysql库表

      在Linux中开启Binlog服务的详细步骤如下:

 执行命令:#vi  /etc/my.cnf

 添加内容:server_id=1

                log_bin = mysql-bin

                Binlog_format = mixed

                expire_logs_days = 7

       server_id用于标识语句最初是从哪个server写入的;log_bin = 表示启用Binlog服务,“mysql-bin”为名称,产生的二进制日志文件名则会以mysql-bin.00000*命名,若无名称定值,默认为主机名;Binlog_format表示Binlog日志模式;expire_logs_days 主要用来控制Binlog日志文件保留时间,超过保留时间的Binlog日志会被自动删除。这里添加的内容server_id为1,Binlog_format模式为自动模式mixed,日志保留时间为7天。

【binlog】恢复Mysql库表
【binlog】恢复Mysql库表

三、查看binlog

【binlog】恢复Mysql库表
【binlog】恢复Mysql库表

(1)查看存在Binlog日志:

      Mysql>show binary logs;

【binlog】恢复Mysql库表

(2)查看binlog日志文件内容:

     Mysql>show binlog events in ‘binlog-name’;

【binlog】恢复Mysql库表

      Log_name为日志名称,Pos为记录的操作开始位置,Event_type为事件类型,End_log_pos为记录的操作结束位置,info为操作内容。查看日志内容,可以找到我们需要的内容以及确定待恢复的起始位置(start-position)和终止位置(stop-position),起始位置(start-position)是我们执行存储语句之后的位置,而终止位置则是删除、修改等不期望有的操作发生之前的位置。

(3)mysqlBinlog导出:

        mysqlbinlog 命令是一个可以以用户可视的方式展示出二进制日志中的内容,并将其中的内容读取出来的mysql工具。在确定好需要的内容以及其起始位置和终止位置后,可以直接通过mysqlbinlog导出,导出命令格式如下:

Mysqlbinlog --start-datetime --stop-datetime binlogname>outfilename

mysqlBinlog --start-position --stop-position  binlogname>outfilename

导出文件格式一般设置为.sql,内容形式一般如下:

【binlog】恢复Mysql库表

四、恢复实操

【binlog】恢复Mysql库表
【binlog】恢复Mysql库表

(1)创建数据:

【binlog】恢复Mysql库表

(2)删除表数据:

【binlog】恢复Mysql库表

(3)查看服务器存在的binlog日志:

【binlog】恢复Mysql库表

      根据查询结果可以得出服务器一共10个binlog日志,编号从mysql-bin.000001至mysql-bin.000010。

(4)确认位置:

      Mysql>show Binlog events in ‘mysql-bin.000010’;

       逐个查看10个日志文件info内容,在mysql-bin.000010号日志找到从创建表开始至删除之前的操作,确定待恢复数据开始于229位置,结束于11165位置。

【binlog】恢复Mysql库表

(5)导出正常SQL语句:

     执行命令:#mysqlBinlog --start-position=229 --stop-position=1165  mysql-bin.000010>recovery.sql

【binlog】恢复Mysql库表

(6)备份恢复:

       执行命令:#mysql -u -p test_data<recovery.sql

【binlog】恢复Mysql库表

经过以上操作之后可以看到数据已经还原回来了。


来源:广西南宁平衡信息技术有限公司,作者:Three-H

【binlog】恢复Mysql库表

本文始发于微信公众号(电子物证):【binlog】恢复Mysql库表

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: