美文网首页
解决mysql插入数据l出现"the table is full

解决mysql插入数据l出现"the table is full

作者: 朝畫夕拾 | 来源:发表于2021-10-26 10:20 被阅读0次

    这里吐槽一下测试环境的空间太垃圾,只给数据库分配了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表以后虽然未释放磁盘空间,但是下次插入数据的时候,仍然可以使用这部分空间。

    如果不能删除   需要加载硬盘空间以及mysql数据位置迁移的  还有第二种操作 :

    mysql出现"the table is full"的问题,一般有两个原因:

    一、需要扩展数据表大小

    vi /etc/my.cnf

    需要修改Mysql的配置文件my.ini,在[mysqld]下添加/修改两行:

    tmp_table_size = 256M

    max_heap_table_size = 256M

    系统默认是16M,修改完后重启mysql

    二、服务器硬盘空间满了,清理垃圾/无用数据即可   

    #  查询服务器空间使用情况

    df -h

    我的数据库存储目录是我之前迁移到了/home目录下

    #查询具体某目录下所有文件大小

    du  -sh  /home/*  

    然后我很诧异的发现,数据库使用的空间并不多

    问题出在一个本地部署项目上,由于网络不稳定等诸多因素,产生了海量的错误日志,达到了99GB,执行删除命令。

    rm  -rf   /home/tomcat8098/logs/catalina.out

    问题圆满解决!

    相关文章

      网友评论

          本文标题:解决mysql插入数据l出现"the table is full

          本文链接:https://www.haomeiwen.com/subject/mxmealtx.html