mysql Got error 28 from storage engine /usr/bin/mysqld_safe: line 183

mysql用的好好的忽然很蛋疼的給我來了一句,mysql Got error 28 from storage engine。後來一查才知道:

Mysql Got error 28 from storage engine錯誤

磁盤臨時空間不夠導致。  

解決辦法:  

清空/tmp目錄,或者修改my.cnf中的tmpdir參數,指向具有足夠空間目錄  

linux版本是my.cnf,一般會放在/etc/my.cnf,/etc/mysql/my.cnf
win下的是my.ini,一般會在安裝目錄的根目錄
還有就是,mysql就算沒有這個配置文件也能運行的



Mysql導致tmp目錄空間耗盡問題

 
收到磁盤空間告警的信息,/tmp目錄磁盤使用率99%。
  www.2cto.com  
mysql 的 tmpdir 設置在/tmp目錄,第一時間查看 ls -alth 併爲發現大文件,也沒有mysql臨時表之類的文件。
連接mysql,show processlist 併爲發現異常查詢 ……
 
整個/tmp目錄8GB,用查看df -h 發現/tmp Avail 值剩下100MB左右;du -sh 發現tmp目錄只用了幾十MB。7GB多的空間哪裏去了?未釋放?
 
通過lsof |grep tmp |more 發現其中一個mysql實例很多類似 /tmp/MLXvlID8 (deleted)
 


查看mysqld.err中發現有多行: [ERROR] /mysql_base/bin/mysqld: Sort aborted
  www.2cto.com  
猜測:Sql異常終止,導致sort aborted 。而臨時目錄下的/tmp/ML****** 等文件雖然刪除,但由於mysql線程連接是長連接,線程還存在,暫時不會釋放空間。
 
若想釋放空間:
1.重啓mysql;
2.重啓應用程序,斷開長連接。
 
結果:
應用程序重啓,長連接斷開,刪除的空間就釋放了。
後來使用了mysql停止和重啓的命令
1、使用 service 啓動:service mysqld start

2、使用 mysqld 腳本啓動:/etc/inint.d/mysqld start

3、使用 safe_mysqld 啓動:safe_mysqld&

二、停止

1、使用 service 啓動:service mysqld stop

2、使用 mysqld 腳本啓動:/etc/inint.d/mysqld stop

3、 mysqladmin shutdown 

三、重啓

1、 使用 service 啓動:service mysqld restart

2、使用 mysqld 腳本啓動:/etc/inint.d/mysqld restart
結果啓動的時候 


找了很多原因後來猜測是磁盤問題;

df -h; 查看磁盤佔用情況;

du -sh /* 統計一下哪個磁盤佔用的多;



看到data佔用的多,沒辦法只能刪除一些東西了。然後重啓OK 完美解決問題。

發佈了181 篇原創文章 · 獲贊 300 · 訪問量 69萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章