MySQL生产环境突发故障处理,自己博客里的机票文章,具体作者不记得了(感谢原作者),好东西和大家分享,1. LOAD飙高<br>
一般导致MySQL服务器LOAD突然飙高,可能的五种情况:<br>
1>.全表扫描的SQL语句;<br>
2>.SELECT操作语句的执行计划走错;<br>
3>.存在UPDATE/DELETE 语句没有索引可选择,而导致堵塞其他SQL语句的执行;<br>
4>.存在修改表结构或OPTIMIZE 语句执行;<br>
5>.大数据量的导入 或 导出,尤其数据库的逻辑备份操作;<br>
6>.业务量大到超过服务器处理能力(我们大家都高度关注业务发展,以及公司业务特点,<br>
还有与开发和运营保持良好联系,很难出现未知的业务突然爆发性增长);<br>
要解决LOAD飙高,必须先找到造成飙高的真实原因,请登陆数据库服务器后,执行命令:<br>
SHOW PROCESSLIST;(适合MySQL各种版本)<br>
或<br>
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND ‘sleep’ AND TIME>100;(5.1.x系列及以上版本)<br>
若一直处在执行状态,且执行时间比较久,可以分析下SQL语句执行计划:<br>
EXPLAIN SQL-statement;<br>
若执行计划不合理,则可以根据SQL类型选择是否与应用负责人联系。首先,查找造成服务器LOAD飙高的PID,特别是DELETE 或UPDATE等会堵住其他SQL语句的PID,然后进入MySQL命令行工具中,对一些SQL先记录下来,再适情考虑执行:kill sql_pid;<br>
1.1 统计信息更新<br>
单表索引统计信息查看命令:SHOW INDEXES FROM tablename;<br>
若发现其统计信息存在偏差,则可以执行:ANALYZE LOCAL TABLE tablename;<br>
备注:请加上LOCAL 参数,从而使此语句执行时不需要登记到二进制文件中。<br>
1.2 碎片整理和统计信息更新<br>
OPTIMIZE 操作等于recreate + analyze 的组合操作,所以会堵塞更新类型SQL语句。对于备机上跑只读类型操作的业务,可以考虑使用此操作命令,对于主服务器不建议使用此命令,为此备机上执行OPTIMIZE 语句,必须这样写:<br>
OPTIMIZE LOCAL TABLE tablename;<br>
备注:这样执行将不会记录到二进制日志文件中,从而不会复制到对其有复制关系的主机上。<br>
2. HA切换<br>
2.1 启动备机Heartbeat<br>
若要启动备机上的Heartbeat进程,则必须先保证备机上的mysqld服务已经停止掉,然后再启动备机上的Heartbeat服务,最后再启动mysqld服务。<br>
2.2 VIP服务快速漂移<br>
直接关闭掉VIP所挂载的主服务器上的Heartbeat服务:service heartbeat stop,待切换之前的备机VIP服务挂载成功,再启动被关掉机器的Heartbeat服务,且确保mysqld服务已经处于停止状态,最后再启动mysqld服务。<br>
另外一种强制VIP飘移办法:<br>
crm_resource -M -r resource_name -H nodename<br>
其中: resource_name 可以通过命令crm_resource –L<br>
进行强制VIP漂移后,还需要检查 failcount值,命令与设置值,如下:<br>
crm_failcount –U nodename -r resource_name –G<br>
如果failcount大于0,则进行下面的操作:crm_resource -r resource_name -p is_managed -v false (设置资源为非受控)crm_failcount -U nodename -r resource_name -G –D (重新设置 failcount值)<br>
crm_resource -H nodename -r resource_name –C<br>
crm_resource -r resource_name -d is_managed (设置为受控)<br>
3.复制中断<br>
复制突然中断的可能原因:<br>
1>. 备机无法连接到主服务器,可能是网络问题,也可能是主服务器的mysqld已停止;<br>
2>. 主键冲突;<br>
3>. 主从服务器数据不一致;<br>
4>. 其他原因;<br>
为使复制继续,我们可以进行如下处理:<br>
1>. Stop slave ;<br>
2> start slave;<br>
3> 检查服务是否正常:show slave status\G<br>
若是主健冲突或数据不一致的情况,则需要额外处理:<br>
1>.stop slave;<br>
2> start slave;<br>
3> show slave status\G记录错误的信息,一般会有详细的SQL保存起来<br>
4> stop slave;<br>
5> SET GLOBAL sql_slave_skip_counter=1;<br>
6> start slave ;<br>
7> show slave status\G<br>
8> 检查复制是否恢复正常,若没有循环1>…7>步骤(备注:有些场景,也可以考虑借助脚<br>
本循环的方式解决)<br>
<br>
4.MySQL假死<br>
4.1 假死状态判断<br>
MySQL假死状态一般只会响应对内存表、服务器状态和变量的操作,而且SHOW PROCESSLIST;可以看到很多连接线程处于命令解析或处理的各种状态,且SQL语句执行时间较长。此时,为校验是否真处于MysQL假死状态,那么可以到库test中任意执行创建表或更新数据的语句,若回车键后没有响应,则一般可以断定MySQL 是否已经处于假死状态。<br>
4.2 假死状态处理<br>
若使用Heartbeat + Dual Master的数据库架构,VIP所在的数据库服务器出现假死状态,则应该直接关闭service heartbeat stop,从而迫使VIP服务转移到另外一台数据库服务器上。<br>
其次,根据处理MySQL 假死状态的经验,使用mysqladmin –uroot –p shutdown命令关闭mysqld服务也是无法处理的,最快的办法是直接Kill进程:<br>
ps -ef | grep mysql | grep -v grep | awk ‘{ print $2 }’| xargs kill -9<br>
然后,把Heartbeat启动成功之后,再启动mysqld服务;对于没有Heartbeat服务的数据库服务器,则直接启动mysqld 服务即可。<br>
5.紧急事件处理的流程<br>
1>.突发紧急事情:<br>
首先,要保持头脑清醒,心态要放平,建议先深呼吸;<br>
其次,仔细检查相关状态、日志等信息,并且保存现场的状态信息,以便后续分析;<br>
最后,确认解决此问题的可行方案,以及判断此方案是否会引入新风险,是否需要其他同事协助;<br>
2>.处理步骤复杂或命令语句多的情况,必须先把相关命令,分步骤在文档中写好;<br>
3>.突发紧急事情的处理,会影响到前端应用服务的事情,应先跟团队领导沟通和确认处理方法,以及影响范围有多大,<br>
影响程度有多严重;<br>
4>.确定紧急处理过程或完毕后,需要那些应用方负责人检查应用是否正常,则应该先联系相关同事;<br>
5>.处理完毕且业务正常之后,优先分析问题和查找是否还有隐患;<br>
6>.发邮件描述整个故障发生、影响范围和程度 、处理过程,以及补填写紧急处理的 ITIL流程单;<br>
7>.回复报警邮件;<br>
备注:<br>
突发事情的解决过程中,无关同事不得围观,需要配合的同事要迅速提供帮助和协调起来,对突发事情解决无帮助的主管及以上级别的人员,一律不得围观,否则以罚款方式处理。<br>
【编注】<br>
突然发现邮箱中竟然还有一份2年前写的东西,应该不是最新的版本,稍作整理分享出来,虽然内容不太丰富,也许对一些技术朋友有借鉴意义,大家也可以互相交换下意见和提供行业案例而逐渐把此主题相关的内容丰富起来。
AD:真正免费,域名+虚机+企业邮箱=0元

了解Python编程的入门级代码示例Python是一种简单易学,功能强大的编程语言。对于初学者来说,了解Python编程的入门级代码示例是非常重要的。本文将为您提供一些具体的代码示例,帮助您快速入门。打印HelloWorldprint("HelloWorld")这是Python中最简单的代码示例。print()函数用于将指定的内容输出

PHP变量存储程序运行期间的值,对于构建动态且交互式的WEB应用程序至关重要。本文将深入探讨php变量,并通过10个真实的示例展示它们的实际应用。1.存储用户输入$username=$_POST["username"];$passWord=$_POST["password"];此示例从表单提交中提取用户名和密码,并将其存储在变量中以供进一步处理。2.设置配置值$database_host="localhost";$database_username="username";$database_pa

标题:从入门到精通:Go语言中常用数据结构的代码实现数据结构在编程中起着至关重要的作用,它是程序设计的基础。在Go语言中,有许多常用的数据结构,掌握这些数据结构的实现方式对于成为一名优秀的程序员至关重要。本文将介绍Go语言中常用的数据结构,并给出相应的代码示例,帮助读者从入门到精通这些数据结构。1.数组(Array)数组是一种基本的数据结构,是一组相同类型

《Go语言编程实例:Web开发中的代码示例》随着互联网的快速发展,Web开发已经成为各行业中必不可少的一部分。作为一门功能强大且性能优越的编程语言,Go语言在Web开发中越来越受到开发者们的青睐。本文将通过具体的代码示例,介绍如何利用Go语言进行Web开发,让读者能够更好地理解和运用Go语言来构建自己的Web应用。1.简单的HTTP服务器首先,让我们从一个

Java冒泡排序最简单的代码示例冒泡排序是一种常见的排序算法,它的基本思想是通过相邻元素的比较和交换来将待排序序列逐步调整为有序序列。下面是一个简单的Java代码示例,演示了如何实现冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

如何使用PHP编写库存管理系统中的库存分仓管理功能代码库存管理是许多企业中不可或缺的一部分。对于拥有多个仓库的企业来说,库存分仓管理功能尤为重要。通过合理管理和跟踪库存,企业可以实现不同仓库之间的库存调拨,优化运营成本,改善协同效率。本文将介绍如何使用PHP编写库存分仓管理功能的代码,并为您提供相关的代码示例。一、建立数据库在开始编写库存分仓管理功能的代码之

华为云边缘计算对接指南:Java代码示例快速实现接口随着物联网技术的快速发展和边缘计算的兴起,越来越多的企业开始关注边缘计算的应用。华为云提供了边缘计算服务,为企业提供了高可靠的计算资源和便捷的开发环境,使得边缘计算应用更加容易实现。本文将介绍如何通过Java代码快速实现华为云边缘计算的接口。首先,我们需要准备好开发环境。确保你已经安装了Java开发工具包(

Java选择排序法代码编写指南及示例选择排序是一种简单直观的排序算法,其思想是每次从未排序的元素中选择最小(或最大)的元素进行交换,直到所有元素排序完成。本文将提供选择排序的代码编写指南,并附上具体的Java示例代码。算法原理选择排序的基本原理是将待排序数组分为已排序和未排序两部分,每次从未排序部分选择最小(或最大)的元素,将其放到已排序部分的末尾。重复上述


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)