mysql插入数据出现error1114 table is full

Posted liweifua

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql插入数据出现error1114 table is full相关的知识,希望对你有一定的参考价值。

今天尝试使用索引来提升查找效率,因此使用mysql进行实验,然后创建了一个表,往里面随机插入100万条数据。使用的是linux环境下的mysql,数据库连接软件是navicat。

使用里面包含tableid,userid等,这是创建表的语句。

CREATE TABLE user (

`tableid` INT (11) NOT NULL AUTO_INCREMENT,  

`userid` VARCHAR (20) NOT NULL,  

`type` TINYINT (16) NOT NULL,  

`time` datetime NOT NULL,  

PRIMARY KEY (`tableid`)

) ENGINE = MEMORY AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8
然后构建一个随机函数,这里的userid使用的是随机函数

delimiter $$
create function rand_string(n int) returns varchar(255)
begin
declare chars_str varchar(100) default ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ‘;
declare return_str varchar(255) default ‘‘;
declare i int default 0;
while i<n do
set return_str =concat(return_str,substring(chars_str,floor(1+rand()*52),1));
set i=i+1;
end while;
return return_str;
end
$$
然后使用过程进行创建

delimiter $$
CREATE PROCEDURE add_vote_memory(IN n int)

select count(*) from vote_record_memory
BEGIN

DECLARE i INT DEFAULT 1;

WHILE (i <= n ) DO  

  INSERT into vote_record_memory  (userid,type,time ) VALUEs (rand_string(20),FLOOR(RAND() * 10),now() );  

        set i=i+1;  

END WHILE;  

END
$$

之后再调用这个过程

call add_vote_memory(1000000)
然后就执行操作,但是还没有执行完就发现出现了报错

查看数据库,发现竟然网上竟然说的是这样做是压力测试的时候报错。原因有二:1

1 得知是由于内存表的大小超过了规定的范围。经过查看二者值默认均是16M,

2.需要设置tmp_table_size 大于等于max_heap_table_size

首先查看内存表得大小:

在mysql里面查询

show VARIABLES like ‘%%table_size%‘

得到上述的结果打开/etc/mysql目录下的my.cnf并在后面添加

tmp_table_size = 256M
max_heap_table_size = 256M
需要写入my.cnf配置文件重启mysql然后生效。

使用

service mysql restart
进行重启mysql服务






















以上是关于mysql插入数据出现error1114 table is full的主要内容,如果未能解决你的问题,请参考以下文章

mysql 解决 ERROR 1114 (HY000): The table 'XXX' is full

mysql table is full error running query with pymysql

SQLSTATE[HY000]: General error: 1114 The table '/home/mysql/data3007/tmp/#sq

mysql cluster导表时报1114问题

mysql cluster 集群时插入大量数据出现 table is full的解决方法

修复mysql:[ERROR] Native table ‘performance_schema’