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

本文介绍了一种MySQL数据库中误操作导致的数据丢失后的恢复流程。包括创建测试数据、模拟误操作、使用只读锁防止脏数据产生、通过GTID跳过错误操作、数据备份及还原等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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;

至此数据恢复完成。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值