天天看点

如何通过 MySQL 的二进制日志恢复数据库数据

操作系统:centos 6.5 x64  (虚拟机);

web 服务:php+mysql+apache;

<a target="_blank"></a>

要使用 mysql 的 binlog 日志功能,首先要在 mysql 的配置文件中开启该功能,操作很简单。找到 mysql 的配置文件,在文件中添加一行 <code>log_bin = mysql-bin</code> 即可。其实在我安装的各种 mysql 环境中,该功能通常都是默认开启的。

开启 binlog 功能后,在 mysql 的数据库目录下就会有诸如 <code>mysql-bin.000001</code>、<code>mysql-bin.000002</code>等文件,这就是 mysql 的二进制日志文件。每当 mysql 启动或手动刷新日志后都会新建一个二进制日志文件。

首先我们 mysql 命令行中,用 <code>show master logs</code> 命令查看已有的 binlog 文件。

如何通过 MySQL 的二进制日志恢复数据库数据

在网站后台文章模块里,我添加了几条测试数据。

如何通过 MySQL 的二进制日志恢复数据库数据

此前 mysql 的 binlog 文件为 <code>mysql-bin.000001</code>,并且在网站后台往数据库中添加了三篇文章。现在我们刷新 binlog 日志,会生成新的 <code>mysql-bin.000002</code> 文件,如下:

<code>flush logs;</code>

<code>show master logs;</code>

如何通过 MySQL 的二进制日志恢复数据库数据

这里我把刚才添加的三篇文章都删除掉。

mysql 的二进制日志文件记录的 mysql 的操作,比如刚才的删除操作,我们来看下日志文件的具体内容。

使用 mysql 的 <code>mysqlbinlog</code> 命令:

<code>mysqlbinlog /data/mysql/mysql-bin.000002</code>

注意:因为我本地 <code>mysqlbinlog</code> 无法识别 binlog 配置中的 <code>default-character-set=utf8</code>,所以这里我在命令中加上了 <code>–no-defaults</code>才起作用,大家引以为鉴。

如何通过 MySQL 的二进制日志恢复数据库数据

下面是日志内容部分截图:

如何通过 MySQL 的二进制日志恢复数据库数据

在通过 mysql 的 binlog 日志恢复数据时,我们可以指定恢复到具体时间点,这有点像服务器快照管理。所以我们现在要恢复刚才删除的那篇文章,可以从删除之前找一个时间点,并恢复到那个时间点即可。

有关 <code>mysqlbinlog</code> 命令的使用方法,我们可以通过 <code>mysqlbinlog</code> 的帮助命令进行查看,如下:

<code>mysqlbinlog –no-defaults –help</code>

如何通过 MySQL 的二进制日志恢复数据库数据

如帮助文档所示,可以通过指定时间或指定位置来恢复数据,这里我以指定时间为例给大家演示。

我们来查看下日志文件 <code>mysql-bin.000001</code>,如下:

<code>mysqlbinlog -no--defaults /data/mysql/mysql-bin.000001</code>

如何通过 MySQL 的二进制日志恢复数据库数据

通过前面操作步骤我们知道,在删除数据之前,我们生成了 <code>mysql-bin.000002</code> 日志文件,所以我们只要恢复到这个时间点即可,上图中我已找到了这个时间。

命令如下:

<code>mysqlbinlog –no-defaults –stop-datetime=’2017-04-11 09:48:48’/data/mysql/mysql-bin.000001 |mysql –uroot –p123456</code>

这时我们在看后台,发现刚才删除的三篇文章都已恢复回来了,从而到达我们期望的目的。

原文发布时间为:2017-04-17

本文来自云栖社区合作伙伴“linux中国”