背景
因为本地测试库的一张表数据不需要了,想要使用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
;即可成功。