最近经历了一次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. 29、最小的K个数

    一.题目 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 二.解法 import java.util.ArrayList; ...

  2. 使用批处理方式从svn 检出DEMO

    Branching in Subversion¶ FROM:https://dev.geogebra.org/trac/wiki/SubversionBranching Some people wan ...

  3. linux下C语言实现多线程通信—环形缓冲区,可用于生产者(producer)/消费者(consumer)【转】

    转自:http://blog.chinaunix.net/uid-28458801-id-4262445.html 操作系统:ubuntu10.04 前言:     在嵌入式开发中,只要是带操作系统的 ...

  4. B2旅游签证记

    先去https://ceac.state.gov/ceac/,选择DS-160表格,在线申请登记个人信息 ,选择大事馆“CHINA BEIJING”和验证码,点 Start an Applicatio ...

  5. OAuth认证与授权

    什么是OAuth授权?   一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...

  6. Python抽象类和接口类

    一.抽象类和接口类 继承有两种用途: 一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名) ...

  7. 记一次java内存溢出的解决过程

    注:本文主要记录这次解决内存溢出问题的过程而不是具体问题. 最近在写一个搜索引擎,使用倒排索引结构进行文档检索,保存索引的基本思想是先将倒排列表保存到内存中一个有序Map里(TreeMap),然后当内 ...

  8. bug-bug-bug

    #-*-coding:utf-8-*- import urllib import urllib2 import re import json import threading import reque ...

  9. tomcat arp

    tcnative-1应该放在JDK\bin目录下,而不是tomcat\bin目录下.

  10. vim 图册

    网上看到的一些图,感觉不错,分享一下 我现在感觉配置文件,很多没有必要,反而很花哨,但是这些基础的东西,反而很高效,实在 VIM的列编辑操作 删除列 1.光标定位到要操作的地方. 2.CTRL+v 进 ...