当前位置: 首页 > news >正文

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中创建文件时&#xf…...

uniapp实现全局悬浮框

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

C语言特殊函数

静态函数 背景知识&#xff1a;普通函数都是跨文件可见的&#xff0c;即在文件 a.c 中定义的函数可以在 b.c 中使用。 静态函数&#xff1a;只能在定义的文件内可见的函数&#xff0c;称为静态函数。 语法 staitc void f(void) // 在函数头前面增加关键字 static &#xff…...

全栈开发(TS,React,Vue, Java, 移动端flutter)接单

个人主页 https://hz.minicv.net/ 技术栈 前端&#xff1a;NextJS React VueJS 后端&#xff1a;NestJS Java 移动端&#xff1a;Flutter 其他&#xff1a;SpringCloud Redis Kafka Zookeeper 项目案例 微行简历&#xff08; TS 全栈项目&#xff0c;一个极简的简历管理平…...

vue3使用百度地图

前情提要&#xff1a; 本文vue采用vue3框架&#xff0c;使用百度地图通过组件vue-baidu-map-3x&#xff1a; 组件官网&#xff1a;地图容器 | vue-baidu-map-3x 使用百度地图需要 申请百度地图AK秘钥 步骤&#xff1a;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 创建达梦数据库容器 执行创建命令&#xff1a; docker run -d -p 30236:5236 --restartalways --name dm8_test…...

golang入门介绍-1

今天开始发布关于go语言入门到实战内容&#xff0c;各位小伙伴准备好。 go介绍 Go语言&#xff08;或 Golang&#xff09;起源于 2007 年&#xff0c;并在 2009 年正式对外发布。是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言。 Go 是…...

273.【华为OD机试真题】园区参观路径(动态规划-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-园区参观路径二.解题思路三.题解代码Python题解…...

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)

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

超市售货|超市售货管理小程序|基于微信小程序的超市售货管理系统设计与实现(源码+数据库+文档)

超市售货管理小程序目录 目录 基于微信小程序的超市售货管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、微信小程序前台 2、管理员后台 &#xff08;1&#xff09;商品管理 &#xff08;2&#xff09;出入库管理 &#xff08;3&#xff09;公告管理 …...

流程图:理解、创建与优化的视觉工具

流程图&#xff1a;理解、创建与优化的视觉工具 引言 在日常生活和工作中&#xff0c;我们经常遇到需要描述一系列步骤或过程的情况。这些步骤可能是制作一杯咖啡、完成一个项目&#xff0c;或者是解决一个复杂的数学问题。流程图&#xff0c;作为一种强大的视觉工具&#xf…...

Java EE面试题解析(下)

21、 什么是Servlet&#xff1f;【掌握】 Servlet是使用Java Servlet应用程序接口&#xff08;API&#xff09;及相关类和方法的Java程序。所有的Servlet都必须要实现的核心接口是javax.servlet.servlet。每一个Servlet都必须要直接或者间接实现这个接口&#xff0c;或者继承j…...

从零开始手写mmo游戏从框架到爆炸(二十一)— 战斗系统二

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 上一章&#xff08;从零开始手写mmo游戏从框架到爆炸&#xff08;二十&#xff09;— 战斗系统一-CSDN博客&#xff09;我们只是完成了基本的战斗&#xff0c;速度属性并没有…...

强化学习入门(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误差&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「c的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; …...

深信服技术认证“SCCA-C”划重点:深信服超融合HCI

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

Vue3路由元信息

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

实用区块链应用:去中心化投票系统的部署与实施

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

Flink中的双流Join

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

协程源码 launch 流程跟踪学习

为了更深入学习协程的底层实现原理&#xff0c;了解协程线程切换的根本本质。也为了以后在工作中可以根据不同的需求场景&#xff0c;更加随心所欲的使用不同的协程。 今天通过 launch 跟踪一下协程的执行流程。 fun getData() {Trace.beginSection("getData");Log.…...

苍穹外卖Day02——总结2

前期文章 文章标题地址苍穹外卖Day01——总结1https://blog.csdn.net/qq_43751200/article/details/135466359?spm1001.2014.3001.5501苍穹外卖Day01——解决总结1中存在的问题https://lushimeng.blog.csdn.net/article/details/135473412 总结2 前期文章1. 新增员工模块1.1 …...

探索Nginx:一款高效、稳定的Web服务器和反向代理工具

在网站性能优化和架构设计中&#xff0c;Nginx以其高性能、低资源消耗和良好的扩展性成为了许多开发者和服务器管理员的首选。本文将为您详细介绍Nginx的概念、特点、安装、配置和使用&#xff0c;帮助您更好地了解并运用这款优秀的工具。 一、Nginx简介 Nginx&#xff08;发…...

文案改写软件,高效改文案的方法

在互联网飞速发展的今天&#xff0c;文案的重要性在营销和传播中变得越发突出。而高质量的文案内能够吸引人们的注意力&#xff0c;打动他们的心弦&#xff0c;这样更能促使他们产生需求。然而&#xff0c;想要写一篇引人入胜的文案并不容易&#xff0c;需要时间和经验来调整和…...

黑马头条-day10

文章目录 app端文章搜索1、文章搜索1.1 ElasticSearch环境搭建1.2 索引库创建①需求分析②ES导入数据场景分析③创建索引和映射 1.3 索引数据同步①app文章历史数据导入ES②文章实时数据导入ES 1.4 文章搜索多条件复合查询①关键词搜索②搜索接口定义 2、搜索历史记录2.1 需求说…...

C++的stack容器->基本概念、常见接口

#include<iostream> using namespace std; #include <stack> //栈stack容器常用接口 void test01() { //创建栈容器 栈容器必须符合先进后出 stack<int> s; //向栈中添加元素&#xff0c;叫做 压栈 入栈 s.push(10); s.push(20); s…...

VUE中引入外部jquery.min.js文件

jquery官网&#xff1a;https://jquery.com/ cdn链接&#xff1a;https://code.jquery.com/jquery-3.7.1.js <template><div class"">测试jq<div id"jq">这是一个盒子</div></div> </template><script> import…...

MongoDB聚合运算符:$avg

$avg运算符返回给定数值的平均值 $avg可用于以下阶段&#xff1a; $addFields阶段(从MongoDB 3.4开始可用)$bucket阶段$bucketAuto阶段$group阶段包含$expr表达式的$match阶段$project阶段$replaceRoot阶段(从MongoDB 3.4开始可用)$replaceWith阶段(从MongoDB 4.2开始可用)$s…...

Web 前端 UI 框架Bootstrap简介与基本使用

Bootstrap 是一个流行的前端 UI 框架&#xff0c;用于快速开发响应式和移动设备优先的网页。它由 Twitter 的设计师和工程师开发&#xff0c;现在由一群志愿者维护。Bootstrap 提供了一套丰富的 HTML、CSS 和 JavaScript 组件&#xff0c;可以帮助开发者轻松地构建和定制网页和…...

【Python笔记-设计模式】惰性评价模式

一、说明 将某些对象的创建或计算延迟到真正需要它们的时候&#xff0c;以减少不必要的资源消耗和提高性能。 惰性评价在Python中实现也成为生成器&#xff0c;一般通过yield关键字实现。 (一) 解决问题 在处理大量数据时&#xff0c;使用惰性加载可以避免一次性加载所有数…...

荣泰建设集团网站/郑州seo优化

1)、在两台机子上面分别安装 mysql , keepalived2)、keepalived 主从&#xff1a;主&#xff1a;vim /etc/keepalived/keepalived.confvrrp_instance VI_1 {state BACKUP # 备用用 BACKUPinterface eth2 #用的是哪个网卡virtual_router_id 59 #虚拟路由地址必须一样&…...

长春南京小学网站建设/常见的网站推广方式有哪些

10.1.2 建立方法 方法使用标准函数格式、可访问性和可选的static修饰符来声明。例如 class MyClass {public string GetString() {return "Here is a string.";} } 注意&#xff0c;如果使用了 static 关键字&#xff0c;这个方法就只能通过类来访问&#xff0c;不能…...

wordpress 按时间排序/微信小程序免费制作平台

开发Android应用过程一般分为三步&#xff1a; 1、创建一个Android工程&#xff1b; 2、在xml布局文件中定义应用所包含的控件&#xff1b; 3、在Java代码中实现业务逻辑。 此文就介绍第一部分&#xff0c;创建一个Android工程&#xff0c;具体步骤如下&#xff1a; 1、打开ecl…...

创建私人网站/石家庄百度seo代理

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…...

自己做一个网站一年的费用/seo搜索引擎工具

首先做一个窗体如下 然后单元中如下代码&#xff1a; 在implementation下面声明两个方法如下&#xff1a; //外部方法&#xff0c;只声明一个参数&#xff0c;此时按照标准的对象内部事件方法TNotifyEvent声明,此声明中&#xff0c;Sender则对应为产生该事件的对象指针。…...

网站备案迁移/流量推广怎么做

01 回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就 “回溯” 返回&#xff0c;尝试别的路径。回溯法是一种选优搜索法&#xff0c;按选优条件向前搜索&#xff0c;以达…...