日期:2014-05-16  浏览次数:20673 次

解决mysql的内存表“table is full”错误
今天中午收到mysql错误日志监控发来的警报,错误日志如下:

101209 13:13:32 [ERROR] /usr/local/mysql/bin/mysqld: The table ‘test_1291870945841162′ is full
101209 13:13:32 [ERROR] /usr/local/mysql/bin/mysqld: The table ‘test_1291870945841162′ is full
101209 13:13:32 [ERROR] /usr/local/mysql/bin/mysqld: The table ‘test_1291870945841162′ is full
101209 13:13:32 [ERROR] /usr/local/mysql/bin/mysqld: The table ‘test_1291870945841162′ is full

通过查询mysql官方站点:
http://dev.mysql.com/doc/refman/5.0/en/full-table.html 得知:
因为系统是linux,不存在操作系统和文件格式的限制,通过表的名字可以得知,该表应该是个临时表,再说数据库里面也查不到该表。

有这一句话很重要:
You are using the MEMORY (HEAP) storage engine; in this case you need to increase the value of the max_heap_table_size system variable. See Section 5.1.3, “Server System Variables”.

于是就修改Mysql的配置文件/etc/my.cnf,在[mysqld]下添加/修改两行:
tmp_table_size = 256M
max_heap_table_size = 256M

系统默认是16M,别忘记重新启动mysql,你也可以在线动态修改该参数,经过这几天的观察,这个世界安静了许多。