MySQL 延迟从库介绍

devtools/2024/10/21 14:29:29/

前言:

我们都知道,MySQL 主从延迟是一件很难避免的情况,从库难免会偶尔追不上主库,特别是主库有大事务或者执行 DDL 的时候。MySQL 除了这种正常从库外,还可以设置延迟从库,顾名思义就是故意让从库落后于主库多长时间,本篇文章我们一起来了解下 MySQL 中的延迟从库。

延迟从库介绍

延迟复制是一种特殊的复制策略,它允许从库在主库执行完数据变更后延迟一段时间再将这些变更同步到从库。这项功能从 MySQL 5.6 版本开始得到支持,区别于传统的异步复制(接近实时),比如用户误删除了重要的表,延迟复制特性保证了用户有机会从延迟的 slave 中恢复误删除的表。延迟特性是在 slave 中实现的,不会影响 master,relay log 的接收等,只是 sql_thread 执行更新的过程延迟了指定的时间。

配置延迟从库的方法是,在从库上执行 STOP SLAVE; 命令暂停复制过程,然后使用 CHANGE MASTER TO MASTER_DELAY = N; 设置延迟时间(单位为秒),之后再执行 START SLAVE; 命令重新启动复制过程
。在监控延迟从库状态时,可以通过 SHOW SLAVE STATUS \G 命令查看 SQL_Delay 和 Seconds_Behind_Master 参数,其中 SQL_Delay 表示设置的延迟时间,Seconds_Behind_Master 表示当前从库真正延迟的时间,正常情况下 Seconds_Behind_Master = SQL_Delay。

延迟从库使用场景

对比正常从库,延迟从库会落后于主库固定的时间,比如设置 3 小时或 6 小时,这样主库的更新操作会在 3 小时或 6 小时后在延迟从库执行。想象一下,若人为或程序 bug 误操作了数据,那我们是不是可以利用延迟从库来进行快速恢复,因为此时延迟从库还未执行到这个误操作的 SQL 。显而易见,延迟从库最大的应用场景就是用于快速恢复数据,对比筛选 binlog 或从备份中恢复这两种方式,延迟从库恢复都要简单便捷许多,特别是对于数据量比较大的实例。延迟从库恢复也有两种情况,一种是误操作的这个表变动很少,那么我们直接就可以在延迟从库上备份此表,然后导入主库即可。另一种情况是按时间点恢复,首先找到误操作语句的 GTID 或 position 点位,然后停止延迟从库同步进程,取消延迟,使用 START SLAVE UNTIL 语法指定条件,让同步进程在指定 gtid 点停下,这样这个延迟从库整体就回放到主库误操作前的时间点了,具体示例操作如下:

#在主库找到误操作的gtid,再往上一条gtid,设置同步截止点
mysql> STOP SLAVE;
mysql> change master to master_delay=0;
mysql> START SLAVE UNTIL SQL_AFTER_GTIDS='0a9a0b8b-4df3-11ed-a592-fa76892aa300:21741053';#同步到对应截止点后,SQL线程会自动停止。
mysql> show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.10.97Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: bin-log.000151Read_Master_Log_Pos: 39510957Relay_Log_File: relay-log.000004Relay_Log_Pos: 35271037Relay_Master_Log_File: bin-log.000151Slave_IO_Running: YesSlave_SQL_Running: No -> 到达设定的GTID值后,SQL线程会中断
...Until_Condition: SQL_AFTER_GTIDS -> 设置后这里会出现同步截止的关键信息Until_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 60859881Master_UUID: 0a9a0b8b-4df3-11ed-a592-fa76892aa300Master_Info_File: mysql.slave_master_infoSQL_Delay: 0
...Retrieved_Gtid_Set: 0a9a0b8b-4df3-11ed-a592-fa76892aa300:21562347-21747364Executed_Gtid_Set: 0a9a0b8b-4df3-11ed-a592-fa76892aa300:1-21741053 -> 同步截止点Auto_Position: 1Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:
# sql线程停止代表此从库已经回放至误操作前的时间点,之后我们就能备份误操作的表然后到主库进行恢复了

除了用于快速恢复外,延迟从库还有以下应用场景:

  • 备份和容错:延迟从库保留的也是一份完整的副本,可用于备份或故障切换。
  • 离线查询:延迟从库可以用于离线数据处理或批量分析任务,而不影响在线服务。
  • 审计和合规性:某些合规性要求可能需要保留数据的历史版本,延迟从库可以作为满足这些要求的一种手段。

总结:

通过以上介绍可以看出,延迟从库主要适用于需要增强数据安全性和提高系统可用性的场合。通过合理配置和监控,可以有效利用延迟从库的优势来增强数据库系统的稳定性、可靠性和性能。如果你的数据库实例有多个从库,不妨将其中一个设置为延迟从库,对于快速恢复数据还是很有作用的。


http://www.ppmy.cn/devtools/103188.html

相关文章

Android解析异步消息处理机制

文章目录 Android解析异步消息处理机制MessageHandlerMessageQueueLooper Android解析异步消息处理机制 Android中的异步消息处理主要由4个部分组成:Message、Handler、MessageQueue和Looper。其中Message和Handler在上一小节中我们已经接触过了,而Mess…

AI模型:追求全能还是专精?

关于全能型AI和专业型AI产品的比较,确实是一个非常有趣的讨论。以下是我对这两类AI产品的优劣及未来潜力的看法。 一、全能型AI的特点与优劣 特点: 广泛适用性:全能型AI能够处理多个领域的问题,从数学解题到市场营销策略&#…

数据仓库系列12:如何设计一个高效的ETL流程?

你是否曾经面对过这样的场景:数据量激增,处理时间延长,系统性能下降?作为一名大数据开发人员,我深知高效的ETL(提取、转换、加载)流程对于数据仓库的重要性。今天,让我们一起探索如何设计一个能够应对海量数据、保证数据质量、并且高效运行的ETL流程。 目录 1. 为什么ETL流程…

MybatisPlus的LambdaQueryWrapper用法

LambdaQueryWrapper<Tag> 是 MyBatis-Plus 框架中的一个功能强大的查询构造器&#xff0c;它用于构建 SQL 查询条件&#xff0c;特别是针对 Lambda 表达式的支持&#xff0c;使得代码更加简洁、类型安全。在这个例子中&#xff0c;LambdaQueryWrapper<Tag> 被用来构…

【项目日记】高并发内存池项目---整体框架设计

比起那些用大嗓门企图压制世界的人&#xff0c; 让全世界都安静下来听你小声说话的人更可畏。 --- 韩寒 《告白与告别》--- 高并发内存池项目---整体框架设计 1 整体框架2 线程缓存3 中心缓存4 页缓存 1 整体框架 现代很多的开发环境都是多核多线程&#xff0c;在申请内存的…

SpringBoot集成kafka-消费者批量消费消息

SpringBoot集成kafka-消费者批量消费消息 1、消费者2、生产者3、application.yml配置文件4、实体类5、生产者发送消息测试类6、测试6.1、测试启动生产者6.2、测试启动消费者 1、消费者 设置批量接收消息 package com.power.consumer;import org.apache.kafka.clients.consume…

QT Mainwindow下指定控件的setMouseTracking(true)和mousemoveevent函数失效-问题解决

目录&#xff1a; 一&#xff0c;问题描述二&#xff0c;解决方法2.1解决依据2.2方法实操 三&#xff0c;参考资料 一&#xff0c;问题描述 ☀️之前碰到过的一个问题&#xff0c;现在分享出来&#xff1a;想在qt哪里搞个鼠标移动在控件显示的图片上&#xff0c;然后实时显示对…

Node.js中离线集成ip2region:实现高效的IP地址定位

ip2region是一个离线IP地址定位库&#xff0c;支持多种编程语言&#xff0c;包括Node.js。其准确率高达99.9%&#xff0c;查询效率也非常高&#xff0c;非常适合在需要IP地址定位的场景中使用。下面是在Node.js项目中如何使用ip2region的详细步骤。 第一步&#xff1a;下载ip2…