Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决
Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决
一、MySQL数据库主从集群概念
MySQL数据库主从集群是一种高可用性和读写分离的数据库架构,它基于MySQL的复制(Replication)技术来同步数据。在主从集群中,至少包含一个主数据库(Master)和一个或多个从数据库(Slave)。
•主数据库:负责处理所有的写操作(INSERT、UPDATE、DELETE等),并将这些更改记录到其二进制日志(Binary Log)中。
•从数据库:通过连接主数据库并读取主库上的二进制日志,将其中的事务事件应用到自身的数据表中,这个过程称为“中继”(Relay)。
从数据库一般只用于处理读请求(SELECT),不接受直接的写入操作。主从集群的主要优势包括:1. 数据备份与恢复:从数据库提供了一种实时的数据备份方式,如果主数据库出现故障,可以从从数据库切换为新的主数据库以保证服务连续性。
2. 负载均衡:通过读写分离,可以将读密集型的查询分发到从数据库上执行,减轻主数据库的压力,提高系统整体性能。
3. 高可用性:多从数据库可以进一步提升系统的可用性,即使部分从库宕机,其他从库仍然可以提供读服务。
4. 扩展性:随着业务量的增长,可以通过增加从库的方式来扩展系统的读能力。在更复杂的场景下,还可以构建多层复制结构,例如级联复制(Cascade Replication)或者环形复制(Circular Replication),甚至实现互为主从的集群,从而达到更高的容错能力和灵活的部署架构。
二、RelayLog是什么?
MySQL中的中继日志(Relay Log)主要用于主从复制(Master-Slave Replication)场景下,它存储在从库(Slave)服务器上。当主库将二进制日志(Binary Log)中的事件传输给从库时,这些事件先被记录到从库上的中继日志文件中,然后由SQL线程读取中继日志并执行这些事件,从而实现主从数据同步。
三、生产实际问题描述
从库服务器MYSQL文件路径下情况如下:
从库产生特别多RelayLog的日志文件,导致硬盘爆满!
四、解决问题方法
解决方法(1)
(1)删除一些没有用的文件,腾出空间,让mysql服务至少正常启动!
(2)修改localhost-relay-bin配置
localhost-relay-bin 日志是MySQL数据库主从复制中备库上的中继日志文件,主要用于存储从主库接收到的binlog事件,以便备库在本地应用这些事件以保持数据同步。当主从之间存在延迟或者同步过程中出现问题时,中继日志可能会积累得很大。处理 localhost-relay-bin 日志过大的情况通常不建议直接手动删除,因为这可能导致数据一致性问题和主从复制中断。正确做法包括:总之,针对localhost-relay-bin日志过大问题,重点在于找到并解决复制延迟的原因,而不是简单粗暴地删除日志文件。如非必要,应当避免手动清理中继日志以防止破坏复制链路。
修改localhost-relay-bin为100G最大值
要在MySQL中配置relay-log-space-limit参数,使其最大值为100GB,你需要在MySQL服务器的配置文件(通常是my.cnf或my.ini)中添加或修改该参数。
vi /etc/my.cnf
以下是在配置文件中设置的方法:[mysqld]下配置追加
设置中继日志使用的最大磁盘空间为100GB
relay-log-space-limit = 107374182400 # 这是100GB以字节为单位表示
请注意,上述数字是将100GB转换成字节(1GB = 1024 * 1024 * 1024 字节)。保存配置文件后,需要重启MySQL服务来应用新的配置。如果你正在运行的是MySQL 8.0版本,请确保这个选项仍然有效,并且适用于你的MySQL复制环境。在某些情况下,可能还需要根据具体的MySQL版本和配置进行调整。在执行任何配置更改之前,请查阅官方文档以获取最新的建议和最佳实践。
在MySQL中,你无法直接通过SQL查询来获取relay-log-space-limit的当前设置值。这个参数是一个服务器级别的系统变量,通常是在MySQL服务器启动时通过配置文件(如my.cnf或my.ini)进行设置的。要查看该参数的当前值,你需要登录到MySQL服务器,并执行如下命令:
SHOW VARIABLES LIKE ‘relay_log_space_limit’;
这条命令将显示所有与 relay_log_space_limit 相关的系统变量及其当前设置值。如果该值为0,则表示未设置上限或者默认不限制中继日志占用的空间大小。
SHOW VARIABLES LIKE 'relay_log_space_limit';
在MySQL中清理relay_log(中继日志)时,你需要确保主从复制没有延迟且数据同步正常。以下是几个步骤来安全地清理relay log:步骤1:检查复制状态首先,通过运行以下命令确认从库是否与主库保持同步:
SHOW SLAVE STATUS;
检查Seconds_Behind_Master字段,如果值为0或者很小,并且没有任何未解决的错误,说明从库是同步的。步骤2:自动清理MySQL从5.6版本开始,通常会自动清理不再需要的relay log文件。确认服务器配置参数relay_log_purge和relay_log_recovery已设置为启用状态:
SHOW VARIABLES LIKE 'relay_log_purge';
SHOW VARIABLES LIKE 'relay_log_recovery';
如果relay_log_purge为ON,MySQL会在应用完 relay log 中的数据后自动删除它们。
解决方法(2)手动清理
手动清理(仅在必要时)尽管MySQL应该自动管理relay log,但在某些情况下可能需要手动干预。为了安全起见,在执行这些操作之前,请确保你了解可能的风险并备份相关数据。方法A: 停止slave服务以释放磁盘空间(这将清除当前的relay log):
STOP SLAVE;
PURGE MASTER LOGS TO 'mysql-relay-bin.000001'; # 替换为你想保留的第一个relay log文件名
START SLAVE;
这个命令会删除所有旧于指定名称的relay log文件,并重新创建新的relay log。
方法B: 如果你想要只移除一部分relay log而不是全部,可以尝试更细致的方法:
PURGE RELAY LOGS BEFORE 'YYYY-MM-DD HH:MM:SS'; # 替换为想要保留的最早时间点
这将会清理在指定时间点之前的relay log。请注意,无论采用哪种方法,都应在清理之后再次检查复制状态以确保其继续正常工作。
SHOW SLAVE STATUS;
预防措施最后,始终建议根据官方文档指导以及实际环境进行操作,并在进行任何清理操作前,充分理解风险和影响。
笔者尝试上述的方法遇到了另个报错
mysql Replica failed to initialize applier metadata structure from the repository
(3)终极解决方法重置当前主从,数据重新同步!
在从库上执行的操作
1. 停止从库的复制服务:
STOP SLAVE;
2. 重置从库的复制状态:
RESET SLAVE ALL;
如果需要重新配置从库指向新的主库,或者重新开始同步,则需执行以下命令(假设新主库的IP为new_master_ip,端口为new_master_port,用户名为replication_user,密码为password):
CHANGE MASTER TO
MASTER_HOST='new_master_ip',
MASTER_USER='replication_user',
MASTER_PASSWORD='password',
MASTER_PORT=new_master_port,
MASTER_LOG_FILE='mysql-bin.00000X', -- 替换为从主库SHOW MASTER STATUS得到的实际日志文件名
MASTER_LOG_POS=X; -- 替换为主库SHOW MASTER STATUS得到的日志位置
4. 启动从库复制:
START SLAVE;
5.确定rely-log最大值的配置是否真正启用
SHOW VARIABLES LIKE 'relay_log_purge';
SHOW VARIABLES LIKE 'relay_log_space_limit';
从而最终解决问题!
总结
MySQL主从集群中Relay Log日志过多过大的可能原因有以下几点:
(1)主库写入操作频繁:
如果主数据库有大量的INSERT、UPDATE和DELETE等写操作,这些操作会被记录到二进制日志(Binary Log)中,并传输给从库。从库会将这些事件记录在自己的Relay Log中,然后执行这些事件以保持与主库的数据同步。
(2) 主从延迟:
在主从复制过程中,如果从库由于性能问题或其他原因无法及时处理并删除Relay Log中的事务,则可能导致Relay Log堆积。例如,SQL线程在从库上运行较慢,或者网络延迟导致数据传输速度低于主库产生新事务的速度。
(3)relay_log_purge设置不当:
MySQL的relay_log_purge参数默认为ON,这意味着一旦SQL线程已经应用了Relay Log中的事务,系统就会自动清理这些已使用的Relay Log文件。但如果该参数被错误地设置为OFF,或者由于某些异常情况导致自动清理机制失效,Relay Log就可能持续增长而不被清理。
从库长时间未重启或主从断开连接后未正确恢复:
当主从之间出现故障导致复制暂停时,如果未及时发现并恢复正常复制,Relay Log将持续接收但不处理新的事务,进而积累大量未执行的日志。
(4)MHA等高可用解决方案禁用自动清理:
在一些高级的MySQL高可用性解决方案如MHA(MySQL Master High Availability)中,为了保证滞后从库能够通过其他节点的Relay Log进行补救性恢复,有时会选择暂时禁用Relay Log的自动清理功能,待所有从库都追赶上主库之后再进行清理。
(5)relay_log_space_limit配置不足:
如果relay_log_space_limit参数设置得过小,而实际产生的Relay Log超过了这个限制值,理论上MySQL应该会自动删除旧的Relay Log来释放空间,但如果这个参数设置不合理,可能会导致Relay Log清理不及时。要解决Relay Log过大过多的问题,通常需要根据实际情况调整上述配置参数,优化复制性能,确保SQL线程能跟上主库的更新速率,并定期检查和合理清理Relay Log。同时,也可以考虑增加从库资源以提高其处理能力。在必要时,可以手动清理Relay Log,但必须确保不会影响数据一致性及复制状态。
相关文章:

Mysql数据库主从集群从库Slave因为RelayLog过多过大引起服务器硬盘爆满生产事故实战解决
Mysql数据库主从集群从库slave因为RelayLog过多过大引起从库服务器硬盘爆满生产事故实战解决 一、MySQL数据库主从集群概念 MySQL数据库主从集群是一种高可用性和读写分离的数据库架构,它基于MySQL的复制(Replication)技术来同步数据。在主…...

QT基本组件
四、基本组件 Designer 设计师(重点) Qt包含了一个Designer程序,用于通过可视化界面设计开发界面,保存文件格式为.ui(界面文件)。界面文件内部使用xml语法的标签式语言。 在Qt Creator中创建文件时…...

uniapp实现全局悬浮框
uniapp实现全局悬浮框(按钮,页面,图片自行设置) 可拖动 话不多说直接上干货 1,在components新建组件(省去了每个页面都要引用组件的麻烦) 2,实现代码 <template><view class"call-plate" :style"top: top px;left: left px;" touchmove&quo…...

C语言特殊函数
静态函数 背景知识:普通函数都是跨文件可见的,即在文件 a.c 中定义的函数可以在 b.c 中使用。 静态函数:只能在定义的文件内可见的函数,称为静态函数。 语法 staitc void f(void) // 在函数头前面增加关键字 static ÿ…...
全栈开发(TS,React,Vue, Java, 移动端flutter)接单
个人主页 https://hz.minicv.net/ 技术栈 前端:NextJS React VueJS 后端:NestJS Java 移动端:Flutter 其他:SpringCloud Redis Kafka Zookeeper 项目案例 微行简历( TS 全栈项目,一个极简的简历管理平…...
vue3使用百度地图
前情提要: 本文vue采用vue3框架,使用百度地图通过组件vue-baidu-map-3x: 组件官网:地图容器 | vue-baidu-map-3x 使用百度地图需要 申请百度地图AK秘钥 步骤:1.进入百度地图开放平台 | 百度地图API SDK | 地图开…...
docker 安装达梦dm8 包含lincese
1.加载达梦数据库docker镜像 dm_v8.1.1.66_x86_rh7_64_ent.tar为申请的镜像文件。 docker load -i dm_v8.1.1.66_x86_rh7_64_ent.tar 查看镜像 docker images 创建达梦数据库容器 执行创建命令: docker run -d -p 30236:5236 --restartalways --name dm8_test…...

golang入门介绍-1
今天开始发布关于go语言入门到实战内容,各位小伙伴准备好。 go介绍 Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布。是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。 Go 是…...
273.【华为OD机试真题】园区参观路径(动态规划-JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-园区参观路径二.解题思路三.题解代码Python题解…...

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)
在我们开始探索人工智能的世界时,了解如何与之有效沉浸交流是至关重要的。想象一下,你手中有一把钥匙,可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词(prompts)。无论你是AI领域的新手&#…...

超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)
超市售货管理小程序目录 目录 基于微信小程序的超市售货管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 (1)商品管理 (2)出入库管理 (3)公告管理 …...

流程图:理解、创建与优化的视觉工具
流程图:理解、创建与优化的视觉工具 引言 在日常生活和工作中,我们经常遇到需要描述一系列步骤或过程的情况。这些步骤可能是制作一杯咖啡、完成一个项目,或者是解决一个复杂的数学问题。流程图,作为一种强大的视觉工具…...
Java EE面试题解析(下)
21、 什么是Servlet?【掌握】 Servlet是使用Java Servlet应用程序接口(API)及相关类和方法的Java程序。所有的Servlet都必须要实现的核心接口是javax.servlet.servlet。每一个Servlet都必须要直接或者间接实现这个接口,或者继承j…...
从零开始手写mmo游戏从框架到爆炸(二十一)— 战斗系统二
导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 上一章(从零开始手写mmo游戏从框架到爆炸(二十)— 战斗系统一-CSDN博客)我们只是完成了基本的战斗,速度属性并没有…...
强化学习入门(Matlab2021b)-创建环境【3】
目录 1 前言2 根据类模板创建自定义环境2.1 创建类模板2.2 Environment properties(环境特性)2.3 Required Functions(需要的环境方法)2.3.1 Constructor function(构造函数)2.3.2 reset function2.3.3 step function2.4 Optional Functions(可选的环境方法)2.5 Environment Vi…...

C++如何避免float误差?
C如何避免float误差? 在开始前我有一些资料,是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!! …...

深信服技术认证“SCCA-C”划重点:深信服超融合HCI
为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。“考试重点”内容框架,帮助大家快速get重点知识 划重点来啦 *点击图片放大展示 深信服云计算认证(S…...

Vue3路由元信息
路由元信息即定义路由时的meta信息 使用路由元信息定义页面在浏览器显示的标题 定义路由 const router createRouter({history:createWebHistory(import.meta.env.BASE_URL),routes:[{path:"/",component:()>import("/components/Login.vue"),meta:{…...

实用区块链应用:去中心化投票系统的部署与实施
一、需求分析背景 随着技术的发展,传统的投票系统面临着越来越多的挑战,如中心化控制、透明度不足和易受攻击等问题。为了解决这些问题,我们可以利用区块链技术去中心化、透明性和安全性来构建一个去中心化投票系统。这样的系统能够确保投票过…...

Flink中的双流Join
1. Flink中双流Join介绍 Flink版本Join支持类型Join API1.4innerTable/SQL1.5inner,left,right,fullTable/SQL1.6inner,left,right,fullTable/SQL/DataStream Join大体分为两种:Window Join 和 Interval Join 两种。 Window Join又可以根据Window的类型细分为3种…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...