我正在尝试使用简单查询向InnoDB表添加一行:
INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');
但是当我尝试这个查询时,我得到以下内容:
SELECT COUNT(*) FROM zip_codes
做一个"SELECT COUNT(*)FROM zip_codes"给了我188,959行,考虑到我在同一个数据库中有另一个810,635行的表,这似乎不太多.
我对InnoDB引擎缺乏经验,从未在MyISAM上遇到过这个问题.这里有哪些潜在的问题?
编辑:只有在zip_codes表中添加行时才会出现这种情况.
编辑:首先检查,如果你没有用完磁盘空间,在解决配置相关的解决方案之前.
在这个例子中innodb_data_file_path
,你的最大尺寸似乎太小了my.cnf
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
在所有innodb表中,你不能容纳超过512MB的数据.
也许你应该改用一个innodb-per-table方案innodb_file_per_table
.
另一个可能的原因是分区已满 - 这正是我现在发生的事情.
你也会得到同样的错误ERROR 1114(HY000):表'#sql-310a_8867d7f'已满
如果您尝试将索引添加到使用存储引擎MEMORY的表.
您需要修改my.cnf中为INNO_DB表设置的限制上限.没有为各个表设置此内存限制,它是为所有表组合设置的.
如果您希望内存自动扩展到512MB
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
如果您不知道限制或不想设置限额上限,可以像这样修改它
innodb_data_file_path = ibdata1:10M:autoextend
如果tmpdir
驻留的分区填满(由于alter table或其他),也会出现此错误
在我的情况下,这是因为托管ibdata1文件的分区已满.
您可能在存储mysql表的分区(通常是/ var/lib/mysql)或存储临时表的位置(通常为/ tmp)中空间不足.
您可能希望: - 在索引创建期间监视您的可用空间. - 将tmpdir MySQL变量指向其他位置.这需要重新启动服务器.
如果您使用NDBCLUSTER作为存储引擎,您应该增加DataMemory
和IndexMemory
.
Mysql FQA
导入8GB sql数据库文件时,我也遇到了这个错误.检查了我的mysql安装驱动器.驱动器中没有剩余空间.因此通过删除不需要的项目并重新运行我的数据库导入命令来获得一些空间.这一次成功了.
除非您启用了innodb_file_per_table
选项,否则InnoDB
将所有数据保存在一个文件中,通常称为ibdata1
.
检查该文件的大小,并检查它所在的驱动器中是否有足够的磁盘空间.