开发者社区> 烂泥行天下> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

通过binlog恢复mysql备份之前的数据

简介:
+关注继续查看

上一篇文章,我们讲解了如何通过mysql的binlog日志恢复mysql数据库,文章连接为《烂泥:通过binlog恢复mysql数据库》。其中我们提到了的备份数据库要晚与要恢复的数据库时间,即要恢复的数据库在前,而备份的数据库在后。

当时我提到说会单独写一篇文章讲解这个情况,本篇文章我就来介绍如何通过binlog日志恢复比备份数据库早时的数据库状态。我们还是以上篇文章的数据及备份文件为基础,来进行本篇文章的讲解。

ailanni数据库完整备份时,其数据库中有1、2、3、4,这四条数据。而此时mysql总共有三个binlog日志文件:mysql-bin.000001、mysql-bin.000002、mysql-bin.000003。其中在mysql-bin.000001中,我们向ilannitable表中插入两个数据1、2。在mysql-bin.000002中我们向ilannitable表中插入两个数据3、4。

现在我们要求把ailanni数据库恢复到插入数据3后,未插入数据4时的状态。即数据库ailanni中只有数据1、2、3,这三条数据。

分析:要达到上述的要求,我们需要使用到mysql-bin.000002,这个binlog日志文件。然后根据binlog日志恢复数据库使,可以指定pos位置节点的方法,来恢复ailanni数据库。

除此非常重要的是,我们还要先把ailanni数据库先恢复到完整备份时的状态,如果不先把ailanni数据库先恢复到完整备份时的状态,我们在使用binlog日志进行恢复时,系统会报错。

我们需要分以下几个步骤,可以恢复题目要求的ailanni数据库状态。如下:

1、 完整恢复ailanni数据库

2、 删除恢复后ailanni数据库中的全部数据

3、 通过binlog日志恢复ailanni数据库

一、完整恢复ailanni数据库

要完整恢复ailanni数据库,我们可以通过mysql命令来实现。但是在这之前,我们还要就有关ailanni数据库是否存在的情况要说明下。

如果目前mysql数据库服务器上有ailanni这个数据库,那么我们在恢复数据时,就不需要重新创建ailanni数据库。如果目前mysql数据库服务器上没有ailanni这个数据库,那么我们就需要重新创建一个空的ailanni数据库。即该数据库只是一个空的库,里面没有任何表或者其他的元素。

如果不创建ailanni数据库的话,我们在通过mysql命令恢复数据库时,系统就会报错,如下:

clip_image001

现在我们来执行mysql命令导入备份的sql文件,如下:

create database ailanni;

/usr/local/mysql/bin/mysql -uroot -p123456 ailanni</root/ailanni.sql

mysql -uroot -p123456

use ailanni;

select id from ilannitable;

clip_image002

通过上图,我们可以看到ailanni数据库已经完全恢复。

二、删除恢复后ailanni数据库中的全部数据

在第一步中我们已经把ailanni数据库全部恢复,现在我们需要清空ailanni数据库。如下:

delete from ilannitable;

select id from ilannitable;

clip_image003

通过上图,我们可以看到目前ailanni数据库中已经没有数据,是一个空的数据库。

三、通过binlog日志恢复ailanni数据库

第二步已经清空ailanni数据库,这样我们就可以通过mysql的binlog日志来恢复ailanni数据库。

也许你会问我们为什么要先完整恢复ailanni数据库,然后再把ailanni数据库清空?

这个是因为如果我们不先完整恢复ailanni数据库的话,我们在使用binlog进行恢复ailanni数据库时,系统会报错的。如下:

clip_image004

如果我们不清空ailanni数据库的话,你会发下恢复后的ailanni数据库,还是没有达到我们的要求。如下:

clip_image005

所以我们要进行第一、二步的操作。

现在我们来查看mysql-bin.000002文件,以确定ailanni数据库恢复的pos位置节点,如下:

/usr/local/mysql/bin/mysqlbinlog /usr/local/mysql/data/mysql-bin.000002

clip_image006

注意图中标记出来的数字304,这个就是binlog的pos节点位置。我们可以看到在该pos节点后mysql才执行插入数据4的SQL语句。那么我们只需要把数据恢复这个节点即可。

使用如下命令进行恢复数据,如下:

/usr/local/mysql/bin/mysqlbinlog –stop-position=304 /usr/local/mysql/data/mysql-bin.000002 |mysql -uroot -p123456

clip_image007

通过上图,我们现在可以看到ailanni数据库已经恢复到插入数据3之后,未插入4的状态。现在ailanni数据库中确实只有1、2、3,这三条数据,已经达到我们的要求。

其实我们还可以这样说,目前只有mysql的所有binlog日志,而且还有一个比较完整的数据库备份,那么该如何恢复数据库呢?

按照上述方法也是可以恢复的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《MySQL入门很轻松》第1章:初识数据库与MySQL----MySQL安装
MySqQL支持多种平台,不同平台的安装与配置过程也不相同。本文以Windows安装图形化MySQL为例
57 0
在ECS实例上安装MySQL
在ECS实例上安装MySQL,步骤如下
104 0
手把手教你在Windows 11安装MySQL 8.0
1. 官网下载安装包 下载地址: dev.mysql.com/downloads/m… 通过下载页面可以选择安装包或者是压缩包。 这里选择安装文件(Installer MSI)
314 0
如何在 Linux 安装 MySQL 数据库
本教程手把手教你如何在 Linux 安装 MySQL 数据库,以 CentOS 8为例。 之前,我买了阿里云的服务器centos7,安装mysql,特此记录一下,方便自己以后查找使用 1. 下载并安装 MySQL 官方的 Yum Repository
284 0
Linux (centos8)安装 MySQL 8 数据库(图文详细教程)
本教程手把手教你如何在 Linux 安装 MySQL 数据库,以 CentOS 7为例。
84 0
Linux (centos8)安装 MySQL 8 数据库(图文详细教程)
今天2021年4月23日。我买了阿里云centos服务器,安装mysql8.0,做一笔记,以供大家使用。 本教程手把手教你如何在 Linux 安装 MySQL 数据库,以 CentOS 8为例。
398 0
从零到一上手玩转云服务器-- mysql安装体验
第一期,主要是熟悉一下ecs的创建与管理 ,mysql的安装及服务启动,yum源的配置,快速搭建门户网站。
35 0
冬季实战营第一期 之 安装并配置MySQL
MySQL是最流行的RDBMS(Relational Database Management System:关系数据库管理系统)之一,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
53 0
MySQL 在 windows 下的安装|学习笔记
快速学习MySQL 在 windows 下的安装
47 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL
立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL
立即下载
PostgresChina2018_张启程_为什么我们抛弃MongoDB和MySQL,选择PgSQL
立即下载