首頁 php教程 php手册 MySQL生产环境突发故障处理手册

MySQL生产环境突发故障处理手册

Jun 07, 2016 am 11:43 AM

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元

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1658
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1231
24
了解Python編程的入門級程式碼範例 了解Python編程的入門級程式碼範例 Jan 04, 2024 am 10:50 AM

了解Python程式設計的入門程式碼範例Python是一種簡單易學,功能強大的程式語言。對於初學者來說,了解Python程式設計的入門級程式碼範例是非常重要的。本文將為您提供一些具體的程式碼範例,幫助您快速入門。列印HelloWorldprint("HelloWorld")這是Python中最簡單的程式碼範例。 print()函數用於將指定的內容輸出

Go語言程式設計實例:Web開發中的程式碼範例 Go語言程式設計實例:Web開發中的程式碼範例 Mar 04, 2024 pm 04:54 PM

《Go語言程式設計實例:Web開發中的程式碼範例》隨著網路的快速發展,Web開發已成為各行業中不可或缺的一部分。作為一門功能強大且效能優越的程式語言,Go語言在Web開發中越來越受到開發者們的青睞。本文將透過具體的程式碼範例,介紹如何利用Go語言進行Web開發,讓讀者更能理解並運用Go語言來建立自己的Web應用。 1.簡單的HTTP伺服器首先,讓我們從一個

PHP 變數的實際應用:10 個實際使用範例 PHP 變數的實際應用:10 個實際使用範例 Feb 19, 2024 pm 03:00 PM

PHP變數儲存程式運行期間的值,對於建立動態且互動的WEB應用程式至關重要。本文將深入探討php變量,並透過10個真實的範例展示它們的實際應用。 1.儲存使用者輸入$username=$_POST["username"];$passWord=$_POST["password"];此範例從表單提交中提取使用者名稱和密碼,並將其儲存在變數中以供進一步處理。 2.設定配置值$database_host="localhost";$database_username="username";$database_pa

如何使用PHP編寫庫存管理系統中的庫存分倉管理功能代碼 如何使用PHP編寫庫存管理系統中的庫存分倉管理功能代碼 Aug 06, 2023 pm 04:49 PM

如何使用PHP編寫庫存管理系統中的庫存分倉管理功能碼庫存管理是許多企業中不可或缺的一部分。對於擁有多個倉庫的企業來說,庫存分倉管理功能尤其重要。透過合理管理和追蹤庫存,企業可以實現不同倉庫之間的庫存調撥,優化營運成本,改善協同效率。本文將介紹如何使用PHP編寫庫存分倉管理功能的程式碼,並為您提供相關的程式碼範例。一、建立資料庫在開始編寫庫存分倉管理功能的程式碼之

Java實作簡單的冒泡排序程式碼 Java實作簡單的冒泡排序程式碼 Jan 30, 2024 am 09:34 AM

Java冒泡排序最簡單的程式碼範例冒泡排序是一種常見的排序演算法,它的基本想法是透過相鄰元素的比較和交換來將待排序序列逐步調整為有序序列。以下是一個簡單的Java程式碼範例,示範如何實作冒泡排序:publicclassBubbleSort{publicstaticvoidbubbleSort(int[]arr){int

華為雲端邊緣運算對接指南:Java程式碼範例快速實作接口 華為雲端邊緣運算對接指南:Java程式碼範例快速實作接口 Jul 05, 2023 pm 09:57 PM

華為雲端邊緣運算對接指南:Java程式碼範例快速實現介面隨著物聯網技術的快速發展和邊緣運算的興起,越來越多的企業開始關注邊緣運算的應用。華為雲端提供了邊緣運算服務,為企業提供了高可靠的運算資源和便利的開發環境,使得邊緣運算應用更容易實現。本文將介紹如何透過Java程式碼快速實現華為雲端邊緣運算的介面。首先,我們需要準備好開發環境。確保你已經安裝了Java開發工具包(

從入門到精通:Go語言中常用資料結構的程式碼實現 從入門到精通:Go語言中常用資料結構的程式碼實現 Mar 04, 2024 pm 03:09 PM

標題:從入門到精通:Go語言中常用資料結構的程式碼實作資料結構在程式設計中起著至關重要的作用,它是程式設計的基礎。在Go語言中,有許多常用的資料結構,掌握這些資料結構的實作方式對於成為優秀的程式設計師至關重要。本文將介紹Go語言中常用的資料結構,並給出對應的程式碼範例,幫助讀者從入門到精通這些資料結構。 1.數組(Array)數組是一種基本的資料結構,是一組相同類型

指導與範例:學習Java選擇排序演算法的實現 指導與範例:學習Java選擇排序演算法的實現 Feb 18, 2024 am 10:52 AM

Java選擇排序法程式碼編寫指南及範例選擇排序是一種簡單直觀的排序演算法,其想法是每次從未排序的元素中選擇最小(或最大)的元素進行交換,直到所有元素排序完成。本文將提供選擇排序的程式碼編寫指南,並附上具體的Java範例程式碼。演算法原理選擇排序的基本原理是將待排序數組分為已排序和未排序兩部分,每次從未排序部分選擇最小(或最大)的元素,將其放到已排序部分的末尾。重複上述

See all articles