MySQL常見故障匯總


一、連接數過多

1.最直接的方法是,可以增加max_connections的大小,提高數據庫最大連接數,但維持會話連接是需要占用內存的,連接數太多,占用大師內存,也是治標不治本。

2.Mysql數據庫在處理完一條SQL后,會自動關閉空閑的會話連接,空閑會話關閉時間,取決於參數wait_timeout的數值(單位:秒),盡量不要調得太大,造成資源浪費。根據生產環境實際情況,適當調整為100-300秒。

3.如果在業務訪問量非常大,但有時因故障需要重啟的情況。重啟后,內存緩存會被釋放掉,這樣大量用戶訪問時,首次查詢數據因沒有緩存,會比正常情況慢很多,短期內會有一個性能高峰,甚至導致連接數爆滿。那么如何解決這個問題?是否可以讓mysql自動加載數據到內存?Mysql innodb提供了一個預熱功能,提前加載數據到緩存中。my.cnf配置以下參數:
# 在關機時導出內存緩存到磁盤
innodb_buffer_pool_dump_at_shutdown = 1
# 在啟動時加載磁盤緩存到內存中
innodb_buffer_pool_dump_at_startup = 1
# 手動導出緩存到磁盤
innodb_buffer_pool_dump_now = 1
# 手動加載緩存到內存
innodb_buffer_pool_load_now = 1

注意:在使用Innodb引擎時,同時也要保證innodb_buffer_pool_size大小充足,innodb_buffer_pool_size/data_size的比值越大越好,如果過小,會增加磁盤I/O的壓力,降低SQL的執行效率,從而連接數過多。

二、慢SQL

可以通過show processlists;使用explain進行分析;根據情況執行kill sql_pid

三、虛擬交換內存不足

適當增加虛擬內存

四、ibdata數據文件誤刪除

因操作失誤誤刪數據文件,此時千萬不能關掉mysqld進程,進程殺死,內存緩存,fd文件被釋放,無法進行恢復。
1.找到Mysql進程pid
2.進入目錄/proc/pid/fd內
3.ls -l |grep ib_,會看到幾個fd的鏈接文件,也就是之前刪除掉的數據文件,此時還在內存中。
4.在數據庫中執行flush tables with read lock進行鎖庫,防止數據寫入,以便恢復
5.查看show master status,等待file及pos點不在變化
6.把第3步的幾個文件,用cp命令復制到數據庫目錄即可
7.重啟mysql服務,恢復完成。

五、主從復制故障處理

主從復制時,經常會出現錯誤,大部分人面對錯誤時,直接進行跳過,其實可能會造成主從數據不一致,對以后故障切換造成潛在的風險。而導出導入數據,重新做主從同步,又太耗費時間。所以,以下是針對這一方面問題的處理,作出的詳細總結。

1.主從復制故障處理
從庫的復制出現中斷,可能原因主鍵沖突,網絡問題,主數據庫異常停止,主從數據不一致等
在master上刪除數據后,slave因找不到相應記錄而報錯,這種情況由於主庫已經將記錄刪除,所以從庫也可以刪除,直接跳過錯誤即可。
show slave status\G;stop slave; set global sql_slave_skip_counter=1;start slave;
解釋:sql_slave_skip_counter該參數最常見場景莫過於在主從復制中由於種種原因導致的主從數據不一致,從必須跳過該事務后才能正常恢復正常狀態。參數sql_slave_skip_counter跳過的是event,不是單個事務(一個事務多個event:begin; insert...;update...;insert...;commit(不是5個event))。
此外#slave-skip-errors=1062,1053,1146 #跳過指定error no類型的錯誤
#slave-skip-errors=all #跳過所有錯誤

2.slave宕機,導致relay-log損壞,同步出錯
如果slave死機,重啟后可能同步報錯error initializing relay log position:I/O reading...,
這是因為relayl-log損壞了。mysql 5.5之后版本,配置relay-log-recover=1參數就可以自動恢復日志同步。

3.slave落后延遲過多
有時查看從庫同步狀態,會發現有一項指標,seconds_behind_master的數值較大,這個數值代表落后主庫的秒數,通常由慢SQL,慢事務導致。因此避免使用大的耗時事務,及時優化SQL,是保證從庫不被拖跨的一個措施。

4.slave自動跳過錯誤
同步時經常出現的錯誤代碼1023(記錄不存在),1062(主鍵重復),這些錯誤無關緊要,每次都手動處理會很繁瑣,浪費不必要的時間,我們可以將其設置自動跳過。
在配置文件中增加:
# 自動跳過錯誤
slave_skip_errors=1023,1062

5.主從數據庫版本不一致引起出錯
如果主從版本不一致,可能會導致同步錯誤。因為低版本的mysql不兼容高版本中的某些語法或特性,則主庫版本高,從庫版本低時,從庫會報錯,而主庫版本低,從庫版本高時,同步正常。生產環境中,應該保持數據庫版本一致,避免增加故障隱患。

參考鏈接:https://blog.csdn.net/u010230971/article/details/80335578


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM