专栏首页码代码的陈同学Mysql插入2.6亿条垃圾数据后会发生什么?
原创

Mysql插入2.6亿条垃圾数据后会发生什么?

欢迎访问 陈同学博客原文

问题现象

今天下午业务人员发现某功能无响应(该功能一天前上线),技术人员初步诊断后发现是某个DB不太正常,DB为Mysql 5.7.18

登陆DB服务器后,进行检测后发现了如下问题:

innodb_trx中发现异常事务

2个事务状态为 inserting ,数据量约为 2.65亿,事务开始时间为昨晚23点

dw_repayment_monitor空间扩展到73G

事务操作的表占用空间急剧扩大

binlog占满了日志盘

binlog设置的过期时间为10天,文件分片大小为100M。/var/log/mysql下产生了大量的binlog,写满了服务器上的一块日志磁盘

CPU/内存耗尽

top命令后发现CPU全被 mysqld 占用

23G内存全部是buff/cache,内存全部耗尽

解决过程

stop问题应用

首先,紧急stop了问题应用,避免问题升级。

kill 事务对应的mysql thread

kill掉 trx_mysql_thread_id中对应的mysql thread, kill之后,show processlist 已经无法查到这两个thread.

两个事务开始进行rollback

转移binlog

将这些天的binlog转移到其他磁盘,确保mysql binlog能够继续写入

尝试处理两个rollback事务

尝试处理掉两个事务,各种折腾之后,宣告失败。

  • 与技术&业务沟通后,知晓该表数据可以自动重建。因此以root用户打算直接删除该表,但是失败
Table is locked by the server
  • 发现 innodb_force_recovery,但是不敢乱用
  • 发现rollback速度为每秒约1W条,2.6亿数据。回滚需要约7个小时,此时是下午三点多

上报风险

由于自己没有这种情况的处理经验,目前已经无法进一步处理,因此上报至了CTO,避免进一步产生风险。

简要描述情况,CTO初步检测后,给出A/B方案:

A:先等待正常回滚

B:如果无法回滚完,考虑停止Mysql. 使用备份数据启用备库

最终结果

由于时间还来得及,采用了A方案,等待DB自然回滚。接下来就是不断检测事务rollback情况,2个rollback事务历经5个小时,到晚上9点终于回滚结束。在此期间,其他同事找到了相应的程序BUG,一个存储过程中的死循环自昨晚23点开始疯狂往表中插入数据。

由于这张表目前达到73G,因此删除再重建了此表,利用程序进行数据恢复。

总结

平时虽然能处理些Mysql常见问题,但很多极端情况还是无法处理。一方面是Mysql技能深度不够,另一方面也是经验的缺失。本文仅记录本次过程,同时也积累了些mysql待学习知识点,其他思考不再撰写。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 深入JVM内幕

    众所周知,Java字节码运行在JRE(Java Runtime Environment)中,JVM又是JRE中最重要的部分,主要用于分析和执行字节码。虽然不深入...

    码代码的陈同学
  • 使用jasypt加密Spring Boot应用中的敏感配置

    本文讲述了在Spring Boot/Spring Cloud应用中使用jasypt来加密properties。

    码代码的陈同学
  • Java中的类加载器

    Class loaders属于JRE的一部分,负责在运行时将Java类动态加载到JVM。得益于class loaders,JVM在无需知晓底层文件或文件系统时就...

    码代码的陈同学
  • Mysql插入2.6亿条垃圾数据后会发生什么?

    今天下午业务人员发现某功能无响应(该功能一天前上线),技术人员初步诊断后发现是某个DB不太正常,DB为Mysql 5.7.18。

    春哥大魔王
  • java代码执行过程简介

    代码即数据,数据即代码,而我们的数据是保存在文件上的,所以我们说文件就是数据,一切代码都是文件。

    一个会写诗的程序员
  • MySQL 数据库和表操作

    MySQL服务器中的 【数据库】 以文件夹的形式存放在data目录下,本章讲解如何优雅地使用SQL命令操作数据库和数据表。

    技能锦囊
  • 19 nowcoder 第二场 经典dp延伸,单调队列变量维护 H Second Large Rectangle

    题意: n*m大小的矩形 n,m<1000。 s[ i ][ j ] 只包含 0 和 1,求 只包含1 的第二大矩形面积。

    用户2965768
  • Emacs中配置使用Rime输入法

    在 Emacs 中使用外部输入法,最大的问题是在切换 evil 的模式的时候,对输入来说会有延迟,因为需要手工将输入法切换到对应的英文模式,才能正常使用快捷键。

    zucchiniy
  • 谷歌背后的数学原理

    在如今这个互联网时代, 有一家公司家喻户晓——它自 1998 年问世以来, 在极短的时间内就声誉鹊起, 不仅超越了所有竞争对手, 而且彻底改观了整个互联网的生态...

    华章科技
  • React中state render到html dom 的流程分析

    作者:xieyu React 中 state render 到 html dom 的流程分析Questions React 的 component的 lifec...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券