MySQL,插入数据提示“The table `xxx` is full”

背景:MEMORY引擎,hash索引

解决方法

1. 查看当前设置的table_size

  show variables like '%table_size%';

2. 若为默认的16M,则需要根绝需要修改

  修改方式有很多种,可以修改配置文件,然后重启MySQL(以后重启依然生效),也可以通过设置全局值(单次生效)

  由于部署方式问题,这里的MySQL重启会覆盖配置,所以采用如下方法

  set global tmp_table_size=1024*1024*1024;

  set global max_heap_table_size=1024*1024*1024;

3. 由于是MEMORY引擎,重启后需要重置表

 否则无法写入新数据 ;

4. 极端情况下 可以删除部分数据或全部数据重整表空间

5. 设置 big_tables = 1 ,将所有临时表存储在磁盘,而非内存中,缺点是如果某个SQL执行时需要用到临时表,则性能会差很多;


长时间操作MySQL需要注意的点

1. MySQL表大小配置,默认大小为16M,超出后无法继续写入数据

  修改方式:见本文“MySQL,插入数据提示“The table `xxx` is full””

2. 长时间连接MySQL,使用Druid连接池,会被中断

  修改方式:

Mysql在5以后针对超长时间DB连接做了一个处理,服务器“wait_timeout”默认8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。所以使用连接池的时候虽然连接对象还在但是链接数据库的时候会一直报这个异常

解决办法:

  进入MySQL查看设置的时间,show global variables like 'wait_timeout';

1、增加MySQL的 wait_timeout 的时间

windows环境下,修改mysql5的配置文件“my.ini”(mysql5 installation dir),增加一行:wait_timeout=1814400  (修改时间为21天),在Linux下叫my.cnf,该文件位于/etc/my.cnf

或者,登录MySQL,使用SQL语句修改,set global wait_timeout=1000000;Mysql在5以后针对超长时间DB连接做了一个处理,服务器“wait_timeout”默认8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。所以使用连接池的时候虽然连接对象还在但是链接数据库的时候会一直报这个异常

解决办法:

  进入MySQL查看设置的时间,show global variables like 'wait_timeout';

1、增加MySQL的 wait_timeout 的时间

windows环境下,修改mysql5的配置文件“my.ini”(mysql5 installation dir),增加一行:wait_timeout=1814400  (修改时间为21天),在Linux下叫my.cnf,该文件位于/etc/my.cnf

或者,登录MySQL,使用SQL语句修改,set global wait_timeout=1000000;