mysql 开启日志后没有内容呢_mysql5.7开启GTID后如何使用日志还原到时间点

mysql5.7开启GTID后如何使用日志还原到时间点

0594c85ab1f396436478128f40a2a0de.png

mysql5.7 开启GTID功能前后使用日志还原到时间点的方案是有所不同的,我们来演示下二者的区别

我们有两个mysql数据库 A库没有开启GTID,B库开启了GTID,我们来演示下不同

一. 数据准备(A B库)

分别在两个库上创建test库和表t,为后边做差别比较

create database test;

use test;

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

flush logs;

insert into t values (1,'a'),(2,'b');

insert into t values (3,'a'),(4,'b');

delete from t where id in (1,2);

select *from t;

ff30ecd42ce9aafe9a3b45855131187d.png

二.A B库备份日志

A库

mysqlbinlog --read-from-remote-server --host=localhost --user=goodhope --password=123456 --raw mysqlbin.000010 --result-file=/home/

B库

mysqlbinlog --read-from-remote-server --host=localhost --user=goodhope --password=123456 --raw mysql3306-bin.000014 --result-file=/home/

三. A库(未开GUID)使用日志还原

1.查看日志

mysqlbinlog --base64-output=DECODE-ROWS -v -v /home/mysqlbin.000010

9d289b3570fa4c6ed8e1069e8dfa0233.png
3e02d337ffe64aa6177a5cf8e15bd58c.png

我们看到在position 291- 418 对应的是插入 id 1 和2,555 到745 是插入 id 3 和4 ,所以我们要将删除的1 和2回复回来,只需要将position 从291 到418这块进行还原即可

2. 直接使用二进制日志恢复

mysqlbinlog --start-position=291 --stop-position=418 /home/mysqlbin.000010 | mysql -ugoodhope -p123456

3. 查看

8ae60f0d67ef466c4ad443bb2ee71da8.png

数据完全恢复了

四 . B库(GUID)使用日志还原

1.查看日志

mysqlbinlog --base64-output=DECODE-ROWS -v -v /home/mysql3306-bin.000014

1cb944ad66f522153fcafd7207bd7b6a.png

同上面的方法,我们也找到了插入1 2的position是从371 到498, 我们只要将这部分还原就可以

2. 还原

mysqlbinlog --start-position=371 --stop-position=498 /home/mysql3306-bin.000014 | mysql -ugoodhope -p123456

还原指令报错

d866848d65d58d8ce0141f9058515928.png

开启了gtid的数据库是不能随便的使用日志去还原的,因为在日志中是有显性设置事务号的,所以正确做法是先从日志中将需要执行的sql产生出来

mysqlbinlog --skip-gtids -d test --start-position=371 --stop-position=498 /home/mysql3306-bin.000014>/home/testlog.sql

使用mysql 使用 source 进行还原该语句

fa9e727c3ee4f9265d76f0c75ba3b250.png

select *from t;

804d644521b393d0b7bb5429f3a9c156.png

另外还要注意,如果是在主从环境中,主库上恢复数据,但是又不想将该恢复动作传递到从库上,则要将该执行sql不要记录到日志中,这里可以使用 set sql_log_bin=0,比如下面这个例子

set sql_log_bin=0;

source /home/log.sql;

set sql_log_bin=1;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值