最近在使用mysql的時候,遇到了一個很奇怪的問題,就是刪除表的時候會卡死。
具體表現為,輸入drop table xxx; 的命令時,終端會停留在這句話的下一行,然后一段時間過后才會出現"query OK, 0 rows affected",之后就不能再輸入其他命令,只能停留在這里,無法操作。
經過反復排查,發現是表的數據量過大導致刪除耗時較長,而數據量過大會導致mysql的內存占用過高,從而出現了卡死的情況。
//示例代碼 DROP TABLE IF EXISTS `xxx`;
在處理類似的問題時,可以通過使用limit限制每次刪除的數據量,或者在處理前使用flush tables命令清空緩存。
//示例代碼 ALTER TABLE `xxx` ENGINE=InnoDB; SET FOREIGN_KEY_CHECKS = 0; TRUNCATE `xxx`; ALTER TABLE `xxx` DISABLE KEYS; DELETE FROM `xxx` WHERE 1; ALTER TABLE `xxx` ENABLE KEYS;
總之,當遇到mysql卡死的情況時,不要慌張,可以從限制數據量、清空緩存、優化sql語句等多個方面進行排查。