最近经历了一次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. 16 - 文件操作-StringIO-BytesIO

    目录 1 文件操作 1.1 open函数介绍 1.2 打开操作 1.2.1 mode模式 1.2.2 文件指针 1.2.3 缓冲区 1.2.4 encoding编码 1.2.5 其他参数 1.3 读写 ...

  2. docker之设置开机自启动(二)

    docker的自启动 通过sysv-rc-conf等管理 启动脚本 # docker.service #!/bin/sh sudo systemctl enable docker sudo syste ...

  3. interesting Integers(数学暴力||数论扩展欧几里得)

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwwAAAHwCAIAAACE0n9nAAAgAElEQVR4nOydfUBT1f/Hbw9202m0r8

  4. Git分支管理小结

    分支管理命令 每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支.截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支.HEAD严格来说不是指向提交,而是指向mas ...

  5. CentOS7.5安装Mysql5.7.22

    一 下载 下载地址:https://www.mysql.com/downloads/ 1 点击第一个链接地址,进入MySQL官方网站,单击“Downloads”下载Tab页,进入下载界面 2 找到Co ...

  6. Yii2使用驼峰命名的形式访问控制器

    yii2在使用的时候,访问控制器的时候,如果控制器的名称是驼峰命名法,那访问的url中要改成横线的形式.例如: public function actionRoomUpdate() { // }//访 ...

  7. vuejs学习——vue+vuex+vue-router项目搭建(二)

    前言 最近比较忙,所有第二章发布晚了,不好意思各位. vuejs学习——vue+vuex+vue-router项目搭建(一) 中我们搭建好了vue项目,我相信大家已经体验了vue其中的奥妙了,接下来我 ...

  8. run-time setting 中设置simulate browser cache 选项详解

    Browser  Emulation: Simulate  browser  cache:配置Vuser模拟带缓存的浏览器.缺省缓存是被允许的, 可以通过禁止该选项来使得所有VUser模拟的浏览器都不 ...

  9. bzoj 1855 dp + 单调队列优化

    思路:很容易写出dp方程,很容易看出能用单调队列优化.. #include<bits/stdc++.h> #define LL long long #define fi first #de ...

  10. bzoj1452 最大流

    很明显最大流.. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #defi ...