0
点赞
收藏
分享

微信扫一扫

利用MySQL延时复制恢复误操作数据

殇感故事 2022-02-18 阅读 95






ip

数据库角色

数据库端口

数据库版本

192.168.102.168

master

3308

5.7.11

192.168.102.169

slave

3308

5.7.11



























主库生成测试数据:

create database test;

use test;

CREATE TABLE `t1` (

`id` int(11) NOT NULL,

`name` varchar(2) NOT NULL DEFAULT '',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;


insert into t1(id,name) values(1,'a'),(2,'b'),(3,'c');


备库:设置为延时同步

stop slave;

change master to master_delay=1800;

start slave;

利用MySQL延时复制恢复误操作数据_数据库

主库模拟误操作 truncate


use test;

truncate table t1;


主库:

session1: 在t1表上加只读锁,防止产生脏数据

flush tables t1 with read lock;


session2: 在主库创建临时库,用于数据恢复

create database tmp;


session1:

show master logs;

show binlog events in 'mysql-bin.000002'; #找到误操作时的gtid位置

延时备份的从库需要根据这个位点进行跳过

利用MySQL延时复制恢复误操作数据_数据库_02

备库:跳过误操作的语句

stop slave;

set gtid_next='4658262b-835c-11e8-87a4-005056910c4b:31';

begin;commit;

set gtid_next='automatic';

change master to master_delay=0;

start slave;



备库进行数据备份

mysqldump -uroot -pzhtx1.q -S /tmp/mysql3308.sock test t1 --set-gtid-purged=off >/tmp/t1.sql


主库导入数据到新创建的临时库:

session2:

mysql -uroot -pzhtx1.q -S /tmp/mysql3308.sock tmp < /tmp/t1.sql


session1: 解锁

unlock tables;

rename table test.t1 to test.t2;

rename table tmp.t1 to test.t1;


至此数据恢复完成。















举报

相关推荐

0 条评论