Mysql清空數據報錯:1114 – The table ‘xxxx’is full問題解決

這裏吐槽一下測試環境的空間太垃圾,只給數據庫分配了4個G的空間,隨便導入上百萬條數據,輕輕鬆鬆就把空間給幹滿了,真是頭疼,今早用Navicat清空數據的時候,報了一個錯:1114 – The table ‘xxxx’is full

網上的解決辦法大概就是修改/etc/my.cnf配置文件,在在[mysqld]下添加/修改兩行:
tmp_table_size = 256M
max_heap_table_size = 256M

其實這個問題還真解決不了我的問題,我的問題就的確是因爲空間滿了:

可以看出var路徑下已經100%,關於如何查看Mysql路徑,我們下一篇會有講解,這篇着重講解如何搞定這個報錯問題。由於是測試環境,所以我們可以刪除一些數據來獲得空間,但是在生產環境,該方法不適用!!!該篇講刪除數據是否能夠釋放空間,生產環境,是不能隨意刪數據的,慎重!!生產一般都有監控,空間達到90%時,基本監控系統會預警,這個時候想的應該是擴容,而不是如何去釋放空間的問題!(個人意見)

MySQL刪除數據是否釋放磁盤空間情況:
1)drop table table_name 立刻釋放磁盤空間 ,不管是Innodb和MyISAM(刪表結構和數據,謹慎用)

2)truncate table table_name 立刻釋放磁盤空間 ,不管是 Innodb和MyISAM 。truncate table其實有點類似於drop table 然後creat,只不過這個create table 的過程做了優化,比如表結構文件之前已經有了等等。所以速度上應該是接近drop table的速度;

3)delete from table_name刪除表的全部數據,對於MyISAM 會立刻釋放磁盤空間 (應該是做了特別處理,也比較合理),InnoDB 不會釋放磁盤空間;

4)對於delete from table_name where xxx帶條件的刪除, 不管是innodb還是MyISAM都不會釋放磁盤空間;

5)delete操作以後使用optimize table table_name 會立刻釋放磁盤空間。不管是innodb還是myisam 。所以要想達到釋放磁盤空間的目的,delete以後執行optimize table 操作。

6)delete from表以後雖然未釋放磁盤空間,但是下次插入數據的時候,仍然可以使用這部分空間。
 

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