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

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

b3ef4408fbe20922aa355e773de06d35.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;

05ebd364e08111628c358efe174aedc1.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

7cebd0875a789927e51f3adb9d519d34.png
560c0a64b8dcfb1ac7b99fbc742380f4.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. 查看

76adcbf1da61c1d5ded52c712cc63f78.png

数据完全恢复了

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

1.查看日志

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

3a370416cf15e3be2047d9778f8ac4ea.png

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

2. 还原

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

还原指令报错

3bf2c1e9398da257596d41c216838da2.png

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

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

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

b566c97cdb0af06b1077e469c3fbccc6.png

select *from t;

42060f7c5a673df9036e09b0a5463c9f.png

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

set sql_log_bin=0;

source /home/log.sql;

set sql_log_bin=1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值