我尝试使用简单的INESRT
查询向InnoDB表添加一行。对于某些值,我收到错误,而对于其他值,则接受查询:
mysql> INSERT INTO pylog (id, description) VALUES ('606_0', 'testing');
ERROR 1114 (HY000): The table 'pylog' is full
mysql> INSERT INTO pylog (id, description) VALUES ('706_0', 'testing');
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO pylog (id, description) VALUES ('610_0', 'testing');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO pylog (id, description) VALUES ('609_0', 'testing');
ERROR 1114 (HY000): The table 'pylog' is full
mysql> INSERT INTO pylog (id, description) VALUES ('609_01', 'testing');
ERROR 1114 (HY000): The table 'pylog' is full
mysql> INSERT INTO pylog (id, description) VALUES ('610_01', 'testing');
Query OK, 1 row affected (0.00 sec)
该表是使用以下查询创建的:
CREATE TABLE pylog (
id VARCHAR(50) NOT NULL PRIMARY KEY,
ctime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
description TEXT
);
该表已包含63,954行,这些行是由使用MySQLdb模块的python脚本创建的。 DB需要大约2GB,磁盘有大约20GB的可用空间。直到最近我才遇到这个问题,无论是在运行我的python脚本还是直接从mysql运行查询时。
我运行的代码:
# CONN is the connection, CUR is the cursor
if not CUR or not CONN:
return
# Create an ID for the new row, in the format '{:d}_{:09d}'
CUR.execute('SELECT id FROM pylog WHERE id LIKE "{}\_%" ORDER BY id DESC LIMIT 1'.format(MACHINE_ID))
if CUR.rowcount > 0:
last_id = CUR.fetchone()[0]
count = int(last_id.split('_')[-1]) + 1
else:
count = 0
log_id = '{}_{:09d}'.format(MACHINE_ID, count)
CUR.execute('INSERT INTO pylog (id, description) VALUES (%s,%s)', (log_id, text))
CONN.commit()
为什么我得到"桌子已满?#34;只有某些值出错,而显然表格不满?
答案 0 :(得分:0)
也许my.cnf配置文件中innodb_data_file_path的最大大小太小。你能尝试一下:
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
答案 1 :(得分:0)
如果您的 LAMP 堆栈使用 XAMPP 进行管理,请点击 MySQL 行和 Admin 按钮旁边的 config 按钮。 >
这将打开配置文件。
在那里,对 innodb_data_file_path 执行 'Ctrl + F' 并将 max 值更新为更高的值并重新启动 MySQL 服务器。
它现在应该可以工作了。