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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介:

系统环境

  • 操作系统: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中国”

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
26天前
|
存储 监控 数据处理
flink 向doris 数据库写入数据时出现背压如何排查?
本文介绍了如何确定和解决Flink任务向Doris数据库写入数据时遇到的背压问题。首先通过Flink Web UI和性能指标监控识别背压,然后从Doris数据库性能、网络连接稳定性、Flink任务数据处理逻辑及资源配置等方面排查原因,并通过分析相关日志进一步定位问题。
157 61
|
2天前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
25 10
|
11天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
81 15
|
5天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。
|
12天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
15天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
16天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
24天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
1月前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
39 1
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
50 4
下一篇
DataWorks