高级DBA带你处理MySQL集群爆表导致硬盘爆满系统产品宕机实际生产事故处理实战案例全网唯一

news2024/10/6 6:01:12

高级DBA带你处理MySQL集群爆表导致硬盘爆满系统产品宕机实际生产事故实战

一、事故描述

数据库某个表A其中用到了二进制字段,本来就无比巨大,再加上某个客户端阶段发生程序BUG,无限反复插入重复数据,导致一个大表一下午时间迅速增长到600G!之后可想而知,生产数据库服务器不正常,随之就是客户投诉!服务器硬盘监控还没来得及反应,硬盘瞬间就被沾满了!而且清理掉没用的日志,马上空间又被沾满!并且数据库已经几乎无法操作!迫在眉睫怎么迅速解决问题?这个事故的难点在于,HA双活没有起效,并且硬盘预警的时间没有跟上表空间增长的速度,当你知道服务器硬盘满的时候,其实已经晚了,无法避免事故,我们遇到这种紧急的事故要如何处理呢?

二、先介绍当前MySQL集群架构

在这里插入图片描述
数据库A与数据库B互为主从,上层有个nginx代理层,默认指向数据库A,当A宕机自动切换B,实现无缝衔接HA高可用集群!
现在遇到的问题比较特别,是某表再短时间内爆硬盘,硬盘监控还没有来得及预警短信,服务器的硬盘已经被沾满!MYSQL的日常操作已经不能正常!语句已经无法执行!

在这里插入图片描述
如果执行SQL如上图,一般会爆一些FULL的错!

在这里插入图片描述
删除一些没有用的日志文件,空间瞬间又被沾满,头痛至极!

三、解决问题的思路与方法

步骤一 关闭入口让硬盘尽量停止增长

关掉2台数据库当前主从同步,其实硬盘已经满了,主从相当于失效,关掉程序客户端程序!避免干扰!

步骤二 尝试删除一些没有用的日志

删除2台服务器没有用的日志文件,尝试腾出一些空间,然后在其他存在MYSQL服务器客户端的,执行单表备份!

mysqldump -u用户名 -p密码  --host=IP地址端口 --databases 数据库名称 --tables 表名名称1,表名称2,表名称3 > /root/db_back/all.sql

步骤三 然后尝试备份到其他服务器上

然后尝试备份到其他服务器上,确保数据不丢失!
在这里插入图片描述
此步骤如果不能执行,可以执行完步骤四之后再试!

步骤四 备份拿到之后,尝试重启数据库服务,释放缓冲池占用硬盘空间

   systemctl restart mysql
   service mysql restart

在这里插入图片描述
重启之后,mysql此时会释放innodb_buffer_pool_size缓冲池在硬盘上占用,此时此刻重启之后的硬盘空间会有所减小,所以此时此刻是操作大表的好机会,趁机备份,然后删除垃圾数据,或者直接truncate 表,数据筛选再还原回去!

innodb_buffer_pool的介绍

innodb_buffer_pool_size 是 MySQL 中 InnoDB 存储引擎的一个重要参数,它用于设置 InnoDB 缓冲池的大小。

InnoDB 缓冲池是 InnoDB 用于缓存数据和索引的内存区域。当 InnoDB 从磁盘读取数据时,它会将数据缓存在缓冲池中,以便后续的读取操作可以直接从内存中获取数据,而无需再次访问磁盘。这样可以显著提高数据库的性能,减少磁盘 I/O 操作。

innodb_buffer_pool_size 指定了 InnoDB 缓冲池可用的内存大小。较大的缓冲池大小可以提高缓存命中率,减少磁盘 I/O,从而提升数据库的性能。然而,过大的缓冲池大小可能会导致内存占用过高,并且在系统内存有限的情况下可能会影响其他进程的内存使用。

设置合适的 innodb_buffer_pool_size 值需要考虑数据库的工作负载、数据量、内存资源等因素。一般来说,可以根据以下几点来确定合适的大小:

  1. 数据量和访问模式:如果数据库中的数据量较大,或者有频繁的读写操作,可能需要较大的缓冲池来提高性能。
  2. 内存资源:确保系统有足够的内存来分配给缓冲池,同时也要考虑其他进程的内存需求。
  3. 性能测试和监控:可以通过性能测试和监控来评估不同缓冲池大小对性能的影响,找到最佳的设置值。

需要注意的是,修改 innodb_buffer_pool_size 参数需要谨慎操作,并且可能需要重启 MySQL 服务使更改生效。在进行任何配置更改之前,建议先备份数据,并在测试环境中进行试验,以确保对生产环境的影响最小化。

步骤五 如果步骤四重启之后,硬盘仍然不足,调整缩小innodb_buffer_pool的配置值

vi /etc/my.cnf

找到参数:

innodb_buffer_pool_size=32000M

在这里插入图片描述
逐步依次减小这个值,然后重启,直到硬盘剩余足够做大表备份,以及删除表操作!!

每次重启MYSQL服务,nnodb_buffer_pool会重载,则每次硬盘会释放,类似于我们的操作系统的虚拟内存的页面文件,原理类似!

此处又关联到linux操作系统虚拟内存的页面文件,当重启mysql服务,也会释放内存,顺便也会释放一些硬盘空间!

MySQL 服务重启后,MySQL 目录占用的硬盘空间变小可能有以下几个原因如下


  1. 缓存清除:重启服务时,MySQL 可能会清除一些缓存数据,例如查询缓存、系统缓存等。这些缓存数据通常存储在硬盘上的特定目录中。清除缓存可以释放一些硬盘空间。
  2. 临时文件删除:在 MySQL 运行过程中,可能会生成一些临时文件,例如临时查询结果、临时备份文件等。重启服务可能会删除这些临时文件,从而减少硬盘空间的占用。
  3. 日志滚动或截断:MySQL 通常会记录日志信息,例如错误日志、事务日志等。在某些情况下,重启服务可能会导致日志文件的滚动或截断,删除旧的日志记录,从而节省硬盘空间。
  4. 数据库优化或清理:在重启之前,可能进行了一些数据库优化操作,例如清理无用的索引、删除过期的数据等。这些操作可能会减少数据库占用的硬盘空间。
  5. 数据压缩:某些情况下,MySQL 可能会对数据进行压缩,从而减少硬盘空间的使用。重启服务后,这种压缩效果可能会更加明显。
  6. 系统清理或修剪:操作系统本身可能在重启时进行一些清理操作,例如删除临时文件、清理回收站等,这也可能导致硬盘空间的减少。
    需要注意的是,具体原因可能因系统配置、数据库使用情况和其他因素而异。如果你对硬盘空间的变化感到困惑,可以进一步检查以下内容:
  7. MySQL 配置:确保 MySQL 的配置参数没有导致数据的过度存储或保留。
  8. 数据增长:检查数据库中的数据量是否有明显的增长,如果是,可能需要考虑优化数据库结构或进行数据清理。
  9. 日志设置:检查日志文件的设置,确保它们不会过度占用硬盘空间,并根据需要调整日志滚动或截断的策略。
  10. 监控和分析:使用监控工具来观察硬盘空间的使用情况,以及数据库活动和性能,以便更好地理解和解决潜在的问题。***

按下图的步骤获取保留生产数据!
在这里插入图片描述

四、总结

此案例主要是解决硬盘监控预警跟不上表空间增长速度的特殊情况,我们在实际生产生活中,尤其是高并发的生产项目,也会遇到突然爆数据库表的情况,希望这个案例能帮助到大家!最好是能提前硬盘预警,但是实际有的时候监控跟不上表的增长速度,这个才是难点!

笔者简介
国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1510195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络地址转换协议NAT

网络地址转换协议NAT NAT的定义 NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因…

Java剖析 : HashMap底层存储数据的结构 | HashSet添加不重复元素底层原理

HashSet底层剖析 前言: 我们知道Set中所存储的元素是不重复的,那么Set接口的实现类HashSet在添加元素时是怎么避免重复的呢? ★ HashSet在添加元素时,是如何判断元素重复的? ● 在底层会先调用hashCode()&#xff0c…

2024年春招助学活动:一批FPGA高端项目让你轻松拿到大厂offer

这里写目录标题 1、前言2、FPGA行业现状3、简历怎么写4、FPGA高端项目4.1 图像类:FPGA图像缩放多路视频拼接4.2 通信类:千兆网UDP协议栈4.3 通信类:万兆网UDP协议栈4.4 图像通信综合:FPGA图像缩放UDP网络视频传输4.5 图像高速接口…

Sora背后的技术《可控生成与文本到图像扩散模型》

在迅速发展的视觉生成领域中,扩散模型革命性地改变了景观,以其令人印象深刻的文本引导生成功能标志着能力的重大转变。然而,仅依赖文本来条件化这些模型并不能完全满足不同应用和场景的多样化和复杂需求。认识到这一不足,多项研究…

day41 动态规划part3

343. 整数拆分 中等 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 但是dp[0] 和 dp[1]为什么是0值得讨论,或者说不用讨论,压根…

Anybus获得IEC 62443-4-1工业网络安全标准ML3认证

HMS 工业网络旗下 Anybus 品牌已成功获得国际电工委员会(IEC)62443-4-1:安全产品开发生命周期要求(一项工业网络安全标准)的 3 级成熟度(ML3)认证。 该认证由全球知名的测试服务提供商 TV Rhein…

vite配置

"vite": "^5.1.4" resolve.alias:配置别名 1、执行npm install -D types/node 或者 yarn add types/node -D 2、以下配置代表访问src时可以用“”代替 resolve: {alias: {"": path.resolve(__dirname, "./src"),},}, 使…

龙芯2K1000双核处理器主板支持SATA固态盘,4G,GPS,WIFI蓝牙等接口

硬件配置 国产龙芯处理器,双核64位系统,板载2GDDR3内存,流畅运行Busybox、Buildroot、Loognix、QT5.12 系统! 接口全 板载4路USB HOST、2路千兆以太网、2路UART、2路CAN总线、Mini PCIE、SATA固态盘接口、4G接口、 GPS接口WIFI、蓝牙、Mini…

Java零基础入门到精通_Day 1

01 Java 语言发展史 Java语言是美国Sun公司(StanfordUniversity Network)在1995年推出的 计算机语言Java之父:詹姆斯高斯林(ames Gosling) 重要的版本过度: 2004年 Java 5.0 2014年 Java 8.0 2018年 9月 Java 11.0 (目前所使用的) 02 J…

Altair® Flux® 仿真软件加速电机、传感器和执行器设计

Altair Flux 仿真软件加速电机、传感器和执行器设计 Flux 着眼于机电设备的复杂性,旨在精确优化其性能、效率、尺寸、成本或重量,为终端用户带来更优质的创新的以及高价值的产品。Flux 可对静磁、交流稳态和瞬态条件,以及电热特性进行仿真。…

【办公类-40-02】20240311 python模仿PPT相册功能批量插入照片,更改背景颜色 (家长会系列二)

作品展示——用Python插入PPT相册 背景需求: 马上就要家长会,我负责做会议前的照片滚动PPT,通常都是使用PPT的相册功能批量导入照片, 生成给一个新的PPT文件 更改背景颜色 设置4秒间隔,应用到全部 保存,改…

Midjourney从入门到实战:图像生成命令及参数详解

目录 0 专栏介绍1 Midjourney Bot常用命令2 Midjourney绘图指令格式3 Midjourney绘图指令参数3.1 模型及版本3.2 画面比例3.3 风格化3.4 图片质量3.5 混乱值3.6 随机数种子3.7 重复贴图3.8 停止3.8 垫图权重3.9 提示词权重分割 0 专栏介绍 🔥Midjourney是目前主流的…

FastAPI 学习笔记

FastAPI 学习笔记 0. 引言1. 快速开始2. 升级示例代码 0. 引言 在 Python 这个充满活力的生态系统中,FastAPI 应运而生,它是一个现代的、快速的 Web 框架,专注于构建 RESTful API。 无论你是一名有经验的 Python 开发人员,还是一…

Flask python 开发篇:项目布局

一、背景简介 Flask应用程序可以像单个文件一样简单。就像上一篇简单实现一个接口一样,所有的东西都在一个python文件内; 然而,当项目越来越大的时候,把所有代码放在单个文件中就有点不堪重负了。 Python 项目使用 包 来管理代码…

2023年第三届中国高校大数据挑战赛第二场赛题D题赛题:行业职业技术培训能力评价(成品论文 代码与思路 视频讲解)

赛题 中国是制造业大国,产业门类齐全,每年需要培养大量的技能娴熟的技术工人进入工厂。某行业在全国有多所不同类型(如国家级、省级等)的职业技术培训学校,进行 5 种技能培训。学员入校时需要进行统一的技能考核&…

Python之禅——跟老吕学Python编程

Python之禅——跟老吕学Python编程 Python之禅1.**Beautiful is better than ugly.**2.**Explicit is better than implicit.**3.**Simple is better than complex.**4.**Complex is better than complicated.**5.**Flat is better than nested.**6.**Spare is better than den…

每日学习笔记:C++ STL 的List

定义 特点 操作函数 关于c.merge(c2)的分析,详见: 。。。。 C list merge()用法及代码示例 - 纯净天空 (vimsky.com) 异常安全性 运用实例

WPF Button去除按钮边框,添加下划线

<Button Width"45" Height"25" FontSize"20" Background"Transparent" BorderBrush"Transparent" Foreground"#FFC9A322" Click"Btn_Retry_Click" ><TextBlock><Underline>重试</…

Redis常见数据类型下

目录 Hash 哈希 常用指令 HSET HGET HEXISTS HDEL HKEYS HVALS HGETALL HMGET 内部编码 Hash类型和关系型数据库 缓存方式对比 List 列表 特点 常用命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP / RPOP LINDEX LINSERT 阻塞(BLOCK)版…

STM32存储左右互搏 SPI总线读写SD/MicroSD/TF卡

STM32存储左右互搏 SPI总线读写SD/MicroSD/TF卡 SD/MicroSD/TF卡是基于FLASH的一种常见非易失存储单元&#xff0c;由接口协议电路和FLASH构成。市面上由不同尺寸和不同容量的卡&#xff0c;手机领域用的TF卡实际就是MicroSD卡&#xff0c;尺寸比SD卡小&#xff0c;而电路和协…