这篇文章主要介绍了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。广州
<强>参数说明:强>
- b:指定数据库
- f:刷新日志
- r:备份存储过程等
- x:锁表
——主数据:在备份语句里添加修改主语句以及binlog文件及位置点信息
查看备份文件
这样呢,我们就把数据做了一个完整的备份。下面来删除数据库,然后通过备份数据进行恢复数据库。
gzip -d bakup_xxx.gz mysql -uroot  -p & lt; bakup_xxx。sql
这样我们就把数据导入到库里了。
继续上面的操做,我们新增小李和小赵这两条数据,并把小赵这条记录删除掉。
在删除之前,我们先来刷新binlog日志,生成一个新的日志,那么我们之后所要操做的内容都会被记录到新的日志文件中。(通过前面binlog日志的详细说明我们知道,每次刷新和服务重启的时候,都会生成一个binlog日志文件。)
flush 原木; show master 地位;
我们注意,binlog的文件是0009位置是在154年,这两个信息很重要
下面我们来做插入和删除操作
这样数据就删除掉了,下面我们再来查看binlog的状态
show master 地位;MySQL使用binlog日志做数据恢复的案例