+
一、了解binlog
Binlog是mysql的二进制日志,以事件形式记录mysql数据库的所有增删改的操作以及这些操作的执行时间。Binlog记录mysql的数据变更,目的是复制和恢复,故在mysql主从复制和数据恢复中能起到很大的作用。Binlog日志有三种模式:
●Row(行模式)
●Statement(默认模式)
●Mixed(自动模式)
Row模式会记录每一行数据被修改的形式;Statement模式只记录语句;Mixed模式会根据执行的每一条具体的sql语句来区分对待记录的日志格式,也就是在Statement和Row之间选择一种。
+
二、开启binlog
要产生Binlog日志首先要确定数据库是否开启Binlog服务,Binlog服务服务是默认不开启的,需要手动开启。
查询命令:Show variables like ‘log_%’
在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
+
(1)查看存在Binlog日志:
Mysql>show binary logs;
+
(2)查看binlog日志文件内容:
Mysql>show binlog events in ‘binlog-name’;
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,内容形式一般如下:
+
四、恢复实操
+
(1)创建数据:
+
(2)删除表数据:
+
(3)查看服务器存在的binlog日志:
根据查询结果可以得出服务器一共10个binlog日志,编号从mysql-bin.000001至mysql-bin.000010。
+
(4)确认位置:
Mysql>show Binlog events in ‘mysql-bin.000010’;
逐个查看10个日志文件info内容,在mysql-bin.000010号日志找到从创建表开始至删除之前的操作,确定待恢复数据开始于229位置,结束于11165位置。
+
(5)导出正常SQL语句:
执行命令:#mysqlBinlog --start-position=229 --stop-position=1165 mysql-bin.000010>recovery.sql
+
(6)备份恢复:
执行命令:#mysql -u -p test_data<recovery.sql
经过以上操作之后可以看到数据已经还原回来了。
来源:广西南宁平衡信息技术有限公司,作者:Three-H
本文始发于微信公众号(电子物证):【binlog】恢复Mysql库表
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论