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


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;


主库模拟误操作 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位置
延时备份的从库需要根据这个位点进行跳过

备库:跳过误操作的语句
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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值