包含 3 行的表格出现“表格已满”错误

包含 3 行的表格出现“表格已满”错误

每隔几周,我就会收到The table 'ttrss_users' is full来自安装的消息http://tt-rss.org/redmine/(用 PHP 编写的 RSS 阅读器应用程序)。

它始终是用户表(InnoDB),其布局如下:

id              int(11)
login           varchar(120)
pwd_hash        varchar(250)
last_login      datetime
access_level    int(11)
theme_id        int(11)
email           varchar(250)
full_name       varchar(250)
email_digest    tinyint(1)
last_digest_sent datetime
created         datetime
twitter_oauth   longtext

导致错误的查询是:UPDATE ttrss_users SET last_login = NOW() WHERE id = x并且仅影响此表(不影响此服务器上的其他表或数据库)。

我发现的唯一解决方案是重新启动服务器。通过 ALTER TABLE 进行更改MAX_ROWS似乎AVG_ROW_LENGTH只会影响 MyISAM 表。

有任何想法吗?

答案1

问题就出在innodb_data_file_path上。

根据您的评论:innodb_data_file_path = ibdata1:10M:autoextend:max:1024M

文件 ibdata1 包含四种类型的数据

  1. 表数据

  2. 表索引

  3. MVCC(多版本并发控制)数据

  4. 表元数据

可能只是没有空间来写入 ttrss_users 中需要更新的行的旧值周围的 MVCC 数据。尝试删除 ibdata1 的大小限制

  • 步骤 01)将 /etc/my.cnf 中的以下行从

    innodb_data_file_path = ibdata1:10M:autoextend:max:1024M

对此

`innodb_data_file_path = ibdata1:10M:autoextend`
  • 步骤02)service mysql restart

  • 步骤 03)尝试 UPDATE 语句

试一试 !!!

更新时间:2011-10-21 17:03 EDT

您可能需要清理 ibdata1 并将 InnoDB 表保留在 ibdata1 之外

相关内容