Mysqldump 在備庫進行備份時會阻塞備庫的sql_thread

kakaxi9521發表於2022-01-24

情況描述:

  1. 讀寫分離環境,Mysql 主庫正常。

  2. 備庫存在大查詢持續了7個小時之久。

  3. 夜間10點備份啟動出現waiting for table flush 等待事件。

  4. 備份後面進來的會話出現積壓且前臺應用被阻塞。


處理過程:

  1. 收到報警後檢查主從延遲情況,show slave status\G;

    有延遲。 

  2. select * from information_schema.processlist order by time desc; 檢查當前session 的執行情況。

    看到有4個session 執行了28000s 未執行完成, 有會話處於waiting for table flush 狀態。此4個會話從堡壘機終端過來確定不是應用中的session。

  3. 將此4個session kill 掉, show processlist 檢視會話狀態, 恢復正常, 主從延遲追平。


故障處理過後回想什麼原因導致會話積壓,前臺應用被阻塞。

  1. 大查詢未結束。

  2. mysqldump 在備份時會進行flush table 操作出現等待。

  3. flush table 操作無法完成後面的session 被阻塞。


測試環境復現場景中發現的現象:

    1.  使用mysqldump 在備庫進行備份,備份sql中不加--single-transaction 時,主庫中對錶進行update 操作從庫的sql_thread 執行緒會被mdl 鎖阻塞,出現主從延遲。


需要掌握的知識點:

mysqldump 備份的整個過程:

https://www.cnblogs.com/digdeep/p/12455757.html


MDL 鎖:

https://www.cnblogs.com/zengkefu/p/5690385.html



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21374452/viewspace-2853824/,如需轉載,請註明出處,否則將追究法律責任。

相關文章