文档章节

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

 云端等你
发布于 2017/05/10 15:30
字数 851
阅读 9
收藏 0

统环境:

操作系统:CentOS 6.5 X64 (虚拟机);

Web 服务:PHP+MySQL+apache;

网站:为方便,直接在本地用蝉知系统搭建一个演示站点;

操作步骤

1、开启 binlog 功能及基本操作

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

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

首先我们 MySQL 命令行中,用 show master logs 命令查看已有的 binlog 文件。

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

2、往站点添加数据

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

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

3、刷新 binlog 日志

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

flush logs;
show master logs;

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

4、删除数据

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

5、binlog 日志内容解析

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

使用 MySQL 的 mysqlbinlog 命令:

mysqlbinlog /data/mysql/mysql-bin.000002

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

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

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

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

6、恢复指定数据

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

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

mysqlbinlog –no-defaults –help

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

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

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

mysqlbinlog -no--defaults /data/mysql/mysql-bin.000001

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

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

命令如下:

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

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

本文地址:http://www.linuxprobe.com/mysql-recovering-data.html

© 著作权归作者所有

粉丝 3
博文 126
码字总数 183841
作品 0
西安
私信 提问
CentOS下利用mysqlbinlog恢复MySQL数据库

如果不小心对数据库进行误操作,而又没有及时备份怎么办?这恐怕是广大的coder经常遇到的一类问题。 我今天就因为不小心删除了某个数据库,但最后的备份是1个礼拜前的,唯一能解决的办法就是...

小杨_Ivan
2017/02/08
0
0
mysql增量备份及恢复解决方案

前言 操作系统崩溃、电源故障、文件系统崩溃和硬件故障等异常状况都可能导致我们正在使用的数据库出现故障而产生数据库中数据不一致的情况。为了保证数据库使用安全,必须定期备份数据库;数...

徐学良
2015/07/23
960
0
Mysql 数据库的同步(master slave) 详解

####原理######## mysql 的数据同步,在 mysql 官方网站文档上,叫 replication 字面是重作的意思,意译就是同步了。 mysql 为了实现 replication 必须打开 bin-log 项,也是打开二进制的 my...

刘赤龙
2010/06/08
95
0
mysqldump备份结合binlog日志恢复

mysqldump备份一般采取全库备份加日志备份的方式,如每天执行一次全备份,每小时执行一次二进制日志备份。在mysql故障后可以使用全备份和日志备份将数据恢复到最后一个二进制日志备份前的任意...

宏强
2017/03/17
0
0
Mysql 数据库的同步(master slave) 详解

####原理######## mysql 的数据同步,在 mysql 官方网站文档上,叫 replication 字面是重作的意思,意译就是同步了。 mysql 为了实现 replication 必须打开 bin-log 项,也是打开二进制的 my...

刘赤龙
2010/05/26
241
0

没有更多内容

加载失败,请刷新页面

加载更多

Apache Kudu 不能删除不存在的数据

使用Apache Kudu客户端,对KafkaConnect Sink 进行扩展。 使用的Apache Kudu 的Java 客户端。突然有天发现作业无法提交,一直报错。 后来才发现这是Kudu自身的一种校验机制。为了忽略这种校验...

吐槽的达达仔
36分钟前
5
0
100万数据插入 mongodb 性能测试

Mongodb服务器信息 8核16G 开发台式机信息 固态硬盘、公司内部网络 示例代码 1.采用jdk1.8 + springboot2.1.6 + mongodb3.8.2组合而成的工程示例 2.mongodb4.0.11所有过程采用默认安装,没做...

不会飞的小龙人
40分钟前
5
0
Java中继承的学习

1.this 关键字 使用在构造器中,调用本类中的其他构造器,this指代当前new的对象 注意: 1)不能使用this关键字进行构造器之间的相互调用 2)this和static不能同时使用 2.static 静态的 static修饰...

zhiruochujian
54分钟前
4
0
1、Docker学习,第一天

Docker学习,第一天 一、Docker简介 环境配置如此之麻烦,换台机器,重来一次,费事费力。安装的时候,把原始环境一模一样的复制过来。开发人员利用Docker可以消除写作编码时,”在我的机器上...

有一个小阿飞
今天
7
0
10.23

一、编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const变量。通过while循环让用户重复输入值,直到用户输入小于或等于0...

197王彧涛
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部