MySQL備份之mysqlpump工具備份故障一則案例分享

昨日,在使用mysqlpump備份數據庫時發現,mysqlpump一啓動就會卡起。

嘗試了幾次還是這樣,查看數據庫err日誌並沒有什麼異常,除了下面的:

Aborted connection 24 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)
Aborted connection 26 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)
Aborted connection 29 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)
Aborted connection 23 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error writing communication packets)
Aborted connection 31 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)

但是跟蹤觀察err日誌發現,這種日誌並不是mysqlpump連接時打印的,而是我手工ctrl + c時打印的。

意思就是正常的。

而且我換做mysqldump工具時,現象還是一致的。

那麼因爲mysqlpump會卡起呢?

嘗試讓mysqlpump繼續保持卡起狀態,跟蹤查看數據庫的show processlist結果發現,mysqlpump所連接的服務線程,正在執行SHOW TABLE STATUS FROM `cms`;

並且持續保持這個動作很久。根據經驗,執行SHOW TABLE STATUS FROM `cms`;時很快就會返回呀,爲什麼mysqlpump備份時執行這麼久呢?


既然在刷tables信息時等待,那麼肯定是某些tables的表結構信息有問題,或者frm文件有損壞。

回想一下發現,原來有幾個表的存儲引擎是federated,並且我的庫無法連接到federated表的remote端。

所以導致mysqlpump在SHOW TABLE STATUS FROM `cms`;時持續等待,應該是在等待超時。

後面我讓mysqlpump一直等待,果然過了一會兒mysqlpump就自覺地打印的幾個表的remote端無法連接的日誌。


所以,生產上使用federated存儲引擎時一定要控制好,以免造成不必要的麻煩。

強烈建議生產表全部使用InnoDB存儲引擎。*^_^*

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章