最近经历了一次MyISAM重启的血泪教训,小小的故障历经3个小时才全部解决完毕,特此铭记一下,以后坚决防止在同一个地方跌倒两次。

事情的过程:


  某日早7点接到几条主库报警,给值班组打电话后得到的消息是有一台交换机重启了。so,第一反应,这种情况不用处理过会就好了。(后来才知道,这是条虚假消息,没有上去验证是一个巨大的错误,代价惨重。)

  等到了8点,依然收到报警,并且有越来越多的趋势。赶紧实际登陆服务器验证,发现服务器被重启了,上面的MySQL实例被意外shutdown。这时候从工作群中知道好几台同机房的服务器都出现相同情况,第一反应,一个机架掉电了。于是就赶紧重启吧,重启好了就奖从库都change到最新的pos上,检查一下主库正常,从库也同步正常。

  再过一会,到了9点,迎来了第一个小高峰,主库瞬间扛不住了,负载飙高到1000+。上服务器check一下服务发现满篇的show processlist都是check table和repair table。业务也开始大幅的接到投诉,没辙,赶紧切换主库吧。但是,由于已经启动主库,中间涉及较多的数据一致性问题,切换脚本用不上,只能手工操作。

  最终10点才把所有收到影响的端口都change完毕,并进行了交叉检查。但是,依然有众多的从库出现数据不一致问题,需要重做,这将持续一天。

  是什么导致一次小小的重启引发长达3个小时的故障呢?

经验总结:


  1、经验主义要不得。第一时间应该上到服务器上确认主库情况,不能存在侥幸心理。

  2、报警的监控应该分级控制,对于主库宕机,需要频繁多次的报警,杜绝感觉是误报的心理作用。

  3、对于MyISAM表,意外关机重启之后,一般都会面临check table的操作,如果表大,那么check一个小时以上是家常便饭。

  所以,对于MyISAM表,如果意外重启,千万不要重启主库,直接进行主库切换操作。这是恢复故障最快的方法,没有之一。

  这里多说一下,为什么重启主库之后一切正常,主要原因为没有用到crash的表,而早高峰到来的时候,所有crash的表被用户,触发了check table操作,导致同时repair表,最终引发了雪崩。

  4、沟通,工程师最爱干的事情就是钻到问题中去解决问题。缺乏一个统一的指挥体系,导致故障处理时间拖长,如果第一时间进行主库切换而不进行其他尝试,故障时间可以大大节省。

  ps:由于一般都是innodb引擎的,对于myisam表的谨慎度不够,由此引发两个问题,其一就是尽快完成引擎升级,都替换成innodb,其二就是在实际操作之前需要确认一下使用的引擎情况。

MyISAM重启之后的一次血泪教训的更多相关文章

  1. 大于16MB的QSPI存放程序引起的ZYNQ重启风险

    ZYNQ芯片是近两年比较流行的片子,双ARM+FPGA,在使用分立FPGA和CPU的场合很容易替代原来的分立器件. ZYNQ可以外接QSPI FLASH作为程序的存储介质. QSPI和SPI flas ...

  2. MySQL1-基础知识点

    目录 零.MySQL安装与配置 一.基本概念 二.基本语法 三.常用指令 四.四种SQL语句       零.MySQL安装与配置 http://www.cnblogs.com/hikarusun/a ...

  3. Raspberry Pi开发之旅-实现云平台监控

    一.基本设置 1 sudo raspi-config 移动到第五项“Enable Camera”,回车进入,按tab键切换到“Enable”回车确认.回到主菜单,tab键切换到“Finish”回车确认 ...

  4. Windows 环境下 Docker 使用及配置

    原文引用: https://www.cnblogs.com/moashen/p/8067612.html 我们可以使用以下两种方式在Windows环境下使用docker: 1. 直接安装: Docke ...

  5. answer

    https://www.cnblogs.com/549294286/p/10451394.html 基于BIO实现的Server端,当建立了100个连接时,会有多少个线程?如果基于NIO,又会是多少个 ...

  6. 关于Win Re的故事

    闲来无事,拿出来自己的小破笔记本瞎折腾,突然发现桌面上竟然还残留着上一个公司的内部vpn, 我是一个有着轻微洁癖强迫症的人,留着这么一个东西占据我本来就不是很大的固态硬盘,简直是罪过.于是我头脑一热, ...

  7. ubuntu安装discourse论坛----结合在apache服务上建立虚拟主机

    指导操作:https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md 一.先安装 Docker / Git: wg ...

  8. 手把手0基础Centos下安装与部署paddleOcr 教程

    !!!以下内容为作者原创,首发于个人博客园&掘金平台.未经原作者同意与许可,任何人.任何组织不得以任何形式转载.原创不易,如果对您的问题提供了些许帮助,希望得到您的点赞支持. 0.paddle ...

  9. FFmpeg学习5:多线程播放视音频

    在前面的学习中,视频和音频的播放是分开进行的.这主要是为了学习的方便,经过一段时间的学习,对FFmpeg的也有了一定的了解,本文就介绍了 如何使用多线程同时播放音频和视频(未实现同步),并对前面的学习 ...

随机推荐

  1. jquery对象和javascript对象即DOM对象相互转换

    jquery对象和javascript对象即DOM对象相互转换 1. DOM 对象转成 jQuery 对象对于已经是一个 DOM 对象,只需要用 $() 把DOM对象包装起来,就可以获得一个 jQue ...

  2. React 16 源码瞎几把解读 【三 点 二】 react中的fiberRoot

    〇.先来看看常用的常量 NoWork = 0 noTimeout = undefined HostRoot = 3 NoContext = 0b000; AsyncMode = 0b001; Stri ...

  3. 145.Binary Tree Postorder Traversal---二叉树后序非递归遍历

    题目链接 题目大意:后序遍历二叉树. 法一:普通递归,只是这里需要传入一个list来存储遍历结果.代码如下(耗时1ms): public List<Integer> postorderTr ...

  4. DNS之XX记录

    DNS服务器里有两个比较重要的记录.一个叫SOA记录(起始授权机构) 一个叫NS(Name Server)记录(域名服务器)关于这两个记录,很多文章都有解释,但是很多人还是很糊涂.我现在通俗的解释一下 ...

  5. linux sed命令查询结果前后批量追加内容(html文件批量修改css,js等文件路径)

    1.需求:linux使用shell命令查询结果前后批量追加内容 例如:我需要在当前目录下所有的css文件路径前追加域名 我想的是用sed替换去实现,鲍哥的思路是用for循环 1.1方法1:鲍哥的for ...

  6. 在JAVA中生成RSA秘钥对实现SSH互信

    https://blog.csdn.net/u014196729/article/details/51496262 https://blog.csdn.net/u013066244/article/d ...

  7. 5 Linux网络编程基础API

    5.1   socket地址API 大端字节序(网络序):高位在低址,低位在高址 小端字节序(主机序):低位在低址,高位在高址 判断,利用联合的特性: #include <iostream> ...

  8. SQL Server中Rowcount与@@Rowcount

    rowcount的用法 rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例, set rowcount 10 select * from 表A 这样的查询只会 ...

  9. Windows 如何远程登陆 Server 的 jupyter

    jupyter 安装就不用赘述了,本示例以 Putty 为例,展示如何从本地 windows 系统调用远程的 jupyter notebook 并且在本地 Chrome 中打开的方法 1. 首先,ss ...

  10. JavaScript初步

    隐式转换 其他类型转换成布尔类型: undefined --> false null --> false 0或者0.0或者NaN --> false 字符串长度为0 --> f ...