排坑日記之批量從庫IO進程停止


早上剛睜眼,看到了一堆數據庫告警的短信,其中一個內容如下:

Problem started at 05:02:58 on 2019.10.12
Problem name: Slave is stopped on 192.168.56.31:3306
Host: 192.168.56.31
Severity: High

眼看這是剛從其他DBA交接過來的數據庫,不敢怠慢,立馬起來查看從庫日志信息如下:

2019-10-12T05:01:16.506540+08:00 1 [Note] Slave I/O thread killed while reading event for channel ''
2019-10-12T05:01:16.506605+08:00 1 [Note] Slave I/O thread exiting for channel '', read up to log 'mybinlog.001265', position 388024306

即非正常停止。

再登錄主庫機器查看主庫錯誤日志,信息如下

2019-10-12T05:01:59.414412+08:00 373818 [Note] Aborted connection 373818 to db: 'unconnected' user: 'repl' host: '192.168.56.31' (failed on flush_net())
2019-10-12T05:01:59.414424+08:00 407536 [Note] Aborted connection 407536 to db: 'unconnected' user: 'repl' host: '192.168.56.49' (failed on flush_net())

從主庫日志可以看出,2個從庫是主庫主動斷開的,而給出的信息也指出了原因failed on flush_net()。另外還有很多 Got timeout reading communication packets 的信息。

因為mysqld是一個多線程的C/S架構的網絡應用,主從同步及數據的讀取是通過網絡來讀寫數據,所以可能會出現寫數據失敗的情況。如果mysql的錯誤日志中出現failed on flush_net()這類的錯誤時,即說明主庫的mysqld在向客戶端發送網絡包時失敗導致的。在主從這種復制場景下則說明是復制過程中master向slave推送binlog寫網絡數據包失敗。
出現此類問題的可能是TCP擁堵等情況造成的,因此建議生產環境的操作系統參數進行調整。可參考如下方式修改

/**  在 /etc/sysctl.conf 文件目錄末尾增加如下參數 */

kernel.sem=250 32000 100 128
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30

/** 使參數生效  */
sysctl -p 

生產環境涉及MySQL數據的操作系統部分參數需要根據情況進行調整,同時MySQL參數也需要根據操作系統的配置情況及實際網絡情況進行調整,這樣數據庫才能穩定、高效的運行。

本次優化的參數在之前MySQL部署時有提及,需要了解的同學可以回看,也可以與我溝通,謝謝。

想進一步溝通或想了解其他文章的同學可以關注我的微信公眾號進行交流。

 


免責聲明!

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



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