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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

系统环境

  • 操作系统:CentOS 6.5 X64  (虚拟机);
  • Web 服务:PHP+MySQL+apache;
  • 网站:为方便,直接在本地用蝉知系统搭建一个演示站点;

操作步骤

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

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

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

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

2、往站点添加数据

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

3、刷新 binlog 日志

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

 
  1. flush logs;
  2. show master logs;

4、删除数据

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

5、binlog 日志内容解析

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

使用 MySQL 的 mysqlbinlog 命令:

 
  1. mysqlbinlog /data/mysql/mysql-bin.000002

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

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

6、恢复指定数据

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

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

 
  1. mysqlbinlog no-defaults help

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

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

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

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

命令如下:

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

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

总结

本文和大家分享了如何通过 MySQL 的二进制日志文件恢复数据。但还是要提醒大家,在平时要做好网站数据备份,现在的一些主流 CMS 建站系统都会内置数据库备份功能,比如这里我用的蝉知系统,数据是网站的命脉,做好数据备份以避免后期不必要的麻烦或损失。

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

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

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
26 2
|
1天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
6 0
|
5天前
|
存储 关系型数据库 MySQL
如何处理爬取到的数据,例如存储到数据库或文件中?
处理爬取的数据,可存储为txt、csv(适合表格数据)或json(适合结构化数据)文件。若需存储大量数据并执行复杂查询,可选择关系型(如MySQL)或非关系型(如MongoDB)数据库。以MySQL为例,需安装数据库和Python的pymysql库,创建数据库和表,然后编写Python代码进行数据操作。选择存储方式应考虑数据类型、数量及后续处理需求。
12 1
|
5天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
5天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
6天前
|
SQL 关系型数据库 MySQL
关系型数据库插入数据的语句
使用SQL的`INSERT INTO`语句向关系型数据库的`students`表插入数据。例如,插入一个`id`为1,`name`为'张三',`age`为20的记录:`INSERT INTO students (id, name, age) VALUES (1, '张三', 20)。如果`id`自增,则可简化为`INSERT INTO students (name, age) VALUES ('张三', 20)`。
5 2
|
6天前
|
SQL 存储 Oracle
关系型数据库查询数据的语句
本文介绍了关系型数据库中的基本SQL查询语句,包括选择所有或特定列、带条件查询、排序、分组、过滤分组、表连接、限制记录数及子查询。SQL还支持窗口函数、存储过程等高级功能,是高效管理数据库的关键。建议深入学习SQL及相应数据库系统文档。
8 2
|
6天前
|
SQL 关系型数据库 MySQL
用MySQL创建公司资料库表格
创建了员工、分支、客户及工作关系的数据库表格。员工与分支间有works_with表记录销售数据,外键关联并处理删除操作(set null或cascade)。插入数据后,通过SQL查询获取员工、客户信息,使用聚合函数、通配符、联合查询和JOIN操作。子查询用于复杂条件筛选。数据库设计确保了数据完整性和参照完整性。
13 0
|
8天前
|
关系型数据库 MySQL 数据库
数据库基础(mysql)
数据库基础(mysql)
|
8天前
|
关系型数据库 MySQL
MySQL全局库表查询准确定位字段
information_schema.COLUMNS 详细信息查询
191 4