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位置
延时备份的从库需要根据这个位点进行跳过
![](https://i-blog.csdnimg.cn/blog_migrate/0710b22c34eaebb64aff92f00565900e.png)
备库:跳过误操作的语句
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;
至此数据恢复完成。