使用binlog恢复数据

建立Mysql 测试数据库

首先咱们来建立一个数据库,mytestmysql

create database mytest;

接着咱们来建立一张表sql

use mytest;

create table t1(id int ,name varchar(20));

而后咱们插入两条数据数据库

insert into t1 values (1,'xiaoming');

insert into t1 values (2,'xiaohong');

下面咱们对mytest数据库进行备份,备份到/root/bakup/测试

mysqldump -uroot -p -B -F -R -x --master-data=2 mytest | gzip > /root/backup/bak_$(date +%F).sql.gz

输入图片说明

参数说明:3d

-B:指定数据库

-F:刷新日志

-R:备份存储过程等

-x:锁表

--master-data:在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

查看备份文件日志

输入图片说明

经过备份库进行数据库回复

这样呢,咱们就把数据作了一个完整的备份。下面来删除数据库,而后经过备份数据进行恢复数据库。code

gzip -d bakup_xxx.gz

mysql -uroot -p < bakup_xxx.sql

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

Binlog 回复

继续上面的操作,咱们新增xiaoli和xiaozhao这两条数据,并把xiaozhao这条记录删除掉。事件

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

flush logs;

show master status;

输入图片说明

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

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

输入图片说明

错误操做开始

这个时候咱们应该是来查看一下binlog日志的状态,以便与咱们一会来进行恢复到此状态,可是,真正的环境中咱们并不知道这个状态,所以这里也就不去查看这个状态了,这个状态的值能够经过后面查看binlog日志文件来进行分析。下面咱们开始误操做:

咱们来把xiaozhao删除掉

输入图片说明

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

show master status;

输入图片说明

这个时候咱们发现我删除操做是个错误的操做,要进行恢复,那么该如何恢复呢?这个时候咱们就能够经过binlog的position来进行恢复。 在进行其余的处理以前,咱们建议,立刻再执行一次flush logs,也就是让出错的部分就集中在这么一个binlog日志文件中。

咱们来查看0009的binlog日志。

输入图片说明

咱们看到delete_rows 结束点是928这个点,起始点是在755这个点,咱们能够把操做的这些数据删除到咱们上次备份的内容,而后经过执行binlog来进行恢复,固然恢复到755这个点以前。

好比我上次备份的是整个数据库,我就能够把整个数据库删除,而后经过备份文件恢复,而后再经过binlog作增量恢复。这样数据就回来了。这里就再也不进行删库了,咱们直接演示使用binlog日志恢复数据的方法

语法以下

mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

好比咱们要把全部的操做都恢复(不包括咱们的删除,咱们知道删除是在755点上):

mysqlbinlog mysql-bin.000009 --start-position 154 --stop-position 755 | mysql -uroot -p mytest

输入图片说明

再来查看表

输入图片说明

咱们发现xiaozhao又回来了,固然了,这里多了一个xiali,是由于我以前并无删除备份前的数据。固然了,咱们在恢复的过程当中能够选择只恢复xiaozhao这么一块内容

下面是binlog日志恢复中一些经常使用的参数

--start-datetime:从二进制日志中读取指定等于时间戳或者晚于本地计算机的时间

--stop-datetime:从二进制日志中读取指定小于时间戳或者等于本地计算机的时间 取值和上述同样

--start-position:从二进制日志中读取指定position 事件位置做为开始。

--stop-position:从二进制日志中读取指定position 事件位置做为事件截至
相关文章
相关标签/搜索