背景
因爲本地測試庫的一張表數據不需要了,想要使用truncate進行刪除。執行操作:TRUNCATE shop.user
; 時提示:1114 - The table ‘user’ is full, Time: 0.008000s
原因
根據上面提示信息解釋爲:表user已經滿了。其實是因爲刪除操作,磁盤可用空間需要大於表本身佔據的空間(比如當前操作的表佔據 2 GB,那麼要求磁盤可用空間必須大於 2 GB)。
我們先來查看一下磁盤空間情況:
[root@dxm22 ~]# df -h
找到了執行truncate失敗的原因是磁盤空間已滿。
解決辦法
解決辦法一:既然確定是磁盤空間已滿,我們來釋放一點空間再試試。
我們先用find / -xdev -size +100M -exec ls -lh {} \;
來查看磁盤空間的佔用情況,然後找到不用的文件進行刪除。
然後再執行TRUNCATE shop.user;
進行刪除。我這裏是刪除成功了。如果不能刪除成功,可以繼續往下看。
解決辦法二:找到my.cnf配置文件,設置 tmp_table_size 大於 max_heap_table_size即可。
操作步驟如下:
- 先查看現配置的tmp_table_size和max_heap_table_size的參數值。
root@db 10:22: [shop]> show variables like '%table_size%';
- 修改my.cnf 配置文件中tmp_table_size和max_heap_table_size這兩個參數。
[root@dxm22 ~]# vim /etc/my.cnf
- 重啓 mysql服務。
[root@dxm22 ~]# systemctl restart mysql.service
執行完重啓命令之後,再來查看一下服務狀態:
[root@dxm22 ~]# systemctl status mysql.service
Active: active (running)說明服務重啓成功。
- 再次查看tmp_table_size和max_heap_table_size這兩個參數值,驗證配置是否生效。
root@db 10:31: [shop]> show variables like '%table_size%';
看到tmp_table_size值已經更新,說明配置生效了。
- 再執行truncate操作。
再執行TRUNCATE shop.user
;即可成功。