当前位置:网站首页>利用MySQL主从复制延迟拯救误删数据
利用MySQL主从复制延迟拯救误删数据
2022-07-26 18:17:00 【啊码】
导语
在日常工作中可能会存在误删数据的情况,今天就简单介绍下如何利用主从复制延迟从库进行数据库的快速恢复。
步骤
1.环境准备
建立一个测试的主从库,写入一些测试数据,非本文要点,过程略。
2.设置延迟同步
在原有同步信息的基础上进行如下操作,设置延迟同步1小时
# 设置延迟1小时mysql> stop slave;
mysql> CHANGE REPLICATION SOURCE TO SOURCE_DELAY=3600;
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.5.160
Master_User: repl
Master_Port: 3314
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 6536
SQL_Delay: 3600 -> 设置后,这里可以看到延迟的信息
SQL_Remaining_Delay: NULL
Retrieved_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:2-53662
Executed_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:1-36546,
d2c64073-2cb5-11ec-b4d1-70b5e873a570:1-2
1 row in set, 1 warning (0.00 sec)
3.假设在主库上进行了一个误删的操作
# 误删一条id=9998的数据mysql> delete from t1 where id=9998;
Query OK, 1 row affected (0.32 sec)
# 主库已经没有了
mysql> select * from t1 where id=9998;
Empty set (0.00 sec)
# 从库还能查到数据
mysql> select * from t1 where id=9998;
+-----+------+------+------+------+
| id | c1 | c2 | c3 | c4 |
+-----+------+------+------+------+
| 9998| 983 | xAP9 | mQeN | 8Eu2 |
+-----+------+------+------+------+
1 row in set (0.00 sec)
4.解析主库的binlog文件
这个步骤目的是找到主库执行删除操作时候相应的GTID值的上一个GTID值
# 先解析出binlogmysqlbinlog -vvv --base64-output=decode-rows mysql-bin.000001 > 01.sql
# 找到被删那条记录的GTID,再往上一条记录
SET @@SESSION.GTID_NEXT= '4b4539dd-2fc1-11ec-949b-70b5e873a570:54230'/*!*/;
# at 15959245
#211103 14:43:25 server id 33145160 end_log_pos 15959316 Query thread_id=53817 exec_time=0 error_code=0
# at 15959377
#211103 14:43:25 server id 33145160 end_log_pos 15959436 Delete_rows: table id 270 flags: STMT_END_F
### DELETE FROM `test`.`t1`
### WHERE
### @1=9998 /* INT meta=0 nullable=0 is_null=0 */
### @2='983' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
### @3='xAP9' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
### @4='mQeN' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
### @5='8Eu2' /* VARSTRING(256) meta=256 nullable=1 is_null=0 */
# at 15959436
#211103 14:43:25 server id 33145160 end_log_pos 15959463 Xid = 163705
COMMIT/*!*/;
# at 15959463
5.从库设置同步停止的时间点
通过步骤4找到的删除操作的GTID值,我们修改下从库的同步状态,需要说明的是,当主库出现误删数据的时候,延迟库一定要第一时间停止同步。
# 从库同步到删数据的gtid值,再往上一条gtid,设置同步截止点,这里的gtids与主库保持一致mysql> STOP SLAVE;
mysql> START REPLICA UNTIL SQL_AFTER_GTIDS= '4b4539dd-2fc1-11ec-949b-70b5e873a570:2-54229';
mysql> START SLAVE;
6.复制同步停止
# 等待同步到对应截止点后,同步的SQL线程会停止mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.5.160
Master_User: repl
Master_Port: 3314
Connect_Retry: 60
Slave_IO_Running: Yes
Slave_SQL_Running: No -> 到达设定的GTID值后,SQL线程会中断
Until_Condition: SQL_AFTER_GTIDS -> 设置后这里会出现同步截止的关键信息
Master_Server_Id: 33145160
Master_UUID: 4b4539dd-2fc1-11ec-949b-70b5e873a570
Master_Info_File: mysql.slave_master_info
SQL_Delay: 3600
SQL_Remaining_Delay: NULL
Master_Retry_Count: 86400
Retrieved_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:2-54230
Executed_Gtid_Set: 4b4539dd-2fc1-11ec-949b-70b5e873a570:1-54229,
d2c64073-2cb5-11ec-b4d1-70b5e873a570:1-3
Auto_Position: 1
7.数据恢复
后续我们可以对这个表进行相应操作,例如把这个表导出再导入到主库,然后再恢复中间的binlog数据。
总结
以上只是模拟一条数据误删的恢复过程,通过闪回工具甚至手动找到相应误删的数据进行恢复会更快,但是对于truncate,drop,delete忘了带where条件 的删除,用闪回工具可能就没办法了,相比备份恢复用延迟库效率会更高。
另外需要注意,如果从库开启了MTS,需要注意开启 slave_preserve_commit_order=1 防止从库误删操作先执行了。
Enjoy GreatSQL :)
边栏推荐
- 微信小程序插件--wxml-to-canvas(生成图片)
- Usage scenarios for automated testing
- The diagram of user login verification process is well written!
- C#创建及读取DAT文件案例
- Detailed tutorial on installing redis on Linux
- Description of MDM separation of powers and classification and grading authority
- LeetCode简单题之装满杯子需要的最短总时长
- Introduce the difference between @getmapping and @postmapping in detail
- 节约gas-ChiToken的用法
- C#获取本地时间/系统时间
猜你喜欢

Basic module and example pytorch learning
The passwords are consistent, and the total display is as shown in the figure below

B站SRE负责人亲述 713事故后的多活容灾建设|TakinTalks大咖分享

Advantages of advanced anti DDoS IP in Hong Kong and which industries are suitable for use

Don't casually pass the request to the asynchronous thread. You can't handle it. You have to use the startasync method

The inventory of chips in the United States is high, and the shipment of chips in China has increased rapidly and the import of 28.3 billion chips has been greatly reduced. TSMC has a showdown

MySQL log introduction

指标和标签是做什么的

What is a server cluster? What are the advantages of overseas server clusters?

How far can Volvo, which has lost its "safety brand" due to declining sales and marginalization of its brand?
随机推荐
TypeScript阶段学习
一些时序建模策略(一)
Briefly describe the 11 core functional modules of MES system
Without Lin benjian, there would be no TSMC today!
Synchronized theory
2022 build enterprise level data governance system
(ICLR-2022)TADA!用于视频理解的时间自适应卷积
ZbxTable 2.0 重磅发布!6大主要优化功能!
Reentrantlock learning - lock release process
Advanced template (runner's notes)
What aspects should be considered in the selection of MES system?
Is it safe for CSC qiniu members to open preferential accounts? I don't know if it's the lowest Commission
高防服务器和高防IP的区别
"Weilai Cup" 2022 Niuke summer multi school training camp 2
MySQL - multi table query and case explanation
torch. Usage and comparison of unsqueeze() squeeze() expand() repeat()
[swoole series 3.1] have you been asked about processes, threads, and collaborations during the interview?
节约gas-ChiToken的用法
After the exam on June 25, see how the new exam outline reviews PMP
微信小程序插件--wxml-to-canvas(生成图片)