MySQL使用binlog日志做数据恢复的案例

  介绍

这篇文章主要介绍了MySQL使用binlog日志做数据恢复的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写分离,数据增量备份以及服务器宕机时的数据恢复。

定期备份固然可以在服务器发生宕机的时候快速的恢复数据,但传统的全量备份不可能做到实时,所以在发生宕机的时候,也会损伤一部分数据,如果这个时候开启了binlog日志,那么可以通过binlog来对没有做备份的这一阶段损失的数据进行恢复。如果了解复述的朋友,可能想到了,复述,有两种持久化方式,分别是AOF和RDB.RDB就类似于MySQL的全量复制,AOF就类似于MySQL的binlog。

关于数据的恢复这里在说一点,既然binlog这么好,是不是开启了binlog就不需要定期做备份了呢,不要这样做。为什么呢,因为binlog的数据量非常大,另外就是使用binlog做数据的恢复性能会非常低。因为binlog是对操作的记录,比如某一时刻,我先插入了一条数据,然后将这条数据删除了,本身数据是没了,但有两条操作。如果是全量备份,肯定没有这条数据,如果使用binlog需要执行一条插入和一条删除操作,因此性能和文件大小都是比较大的。

啰嗦了一堆,下面说关于数据恢复的问题:

在正式开始之前,先来说一说MySQL完整备份数据库,以及恢复数据库的方法

备份数据库:

首先我们来创建一个数据库,mytest

create  database  mytest;

<强>接着我们来创建一张表

use  mytest;   create  table  t1 (id  int  name  varchar (20));

<强>然后我们插入两条数据

insert  into  t1  values (1) & # 39;小明# 39;);   insert  into  t1  values (2 & # 39;北京市# 39;);

<强>下面我们对mytest数据库进行备份,备份到/根/bakup/

mysqldump  -uroot  -p  -B  -F  -R  -x ——主数据=https://www.yisu.com/zixun/2 mytest | gzip>/root/backup/bak_美元(日期+ % F) . sql。广州

 MySQL使用binlog日志做数据恢复的案例

<强>参数说明:

- b:指定数据库

- f:刷新日志

- r:备份存储过程等

- x:锁表

——主数据:在备份语句里添加修改主语句以及binlog文件及位置点信息

查看备份文件

 MySQL使用binlog日志做数据恢复的案例

这样呢,我们就把数据做了一个完整的备份。下面来删除数据库,然后通过备份数据进行恢复数据库。

gzip  -d  bakup_xxx.gz   mysql  -uroot  -p  & lt; bakup_xxx。sql

这样我们就把数据导入到库里了。

继续上面的操做,我们新增小李和小赵这两条数据,并把小赵这条记录删除掉。

在删除之前,我们先来刷新binlog日志,生成一个新的日志,那么我们之后所要操做的内容都会被记录到新的日志文件中。(通过前面binlog日志的详细说明我们知道,每次刷新和服务重启的时候,都会生成一个binlog日志文件。)

flush 原木;   show  master 地位;

 MySQL使用binlog日志做数据恢复的案例

我们注意,binlog的文件是0009位置是在154年,这两个信息很重要

下面我们来做插入和删除操作

 MySQL使用binlog日志做数据恢复的案例“> <br/> </p> <p>这个时候我们应该是来查看一下binlog日志的状态,以便与我们一会来进行恢复到此状态,但是,真正的环境中我们并不知道这个状态,因此这里也就不去查看这个状态了,这个状态的值可以通过后面查看binlog日志文件来进行分析。下面我们开始误操作:</p> <p>我们来把小赵删除掉</p> <p> <img src=

这样数据就删除掉了,下面我们再来查看binlog的状态

show  master 地位;

MySQL使用binlog日志做数据恢复的案例