有3行的表上的“表已满”错误

每隔几个星期,我收到一条消息The table 'ttrss_users' is full (用PHP编写的RSS阅读器应用程序)的安装完成了The table 'ttrss_users' is full

它总是用户表(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_ROWSAVG_ROW_LENGTH似乎只影响MyISAM表。

有任何想法吗?

问题在于innodb_data_file_path。

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

ibdata1文件包含四种types的数据

  1. 表数据

  2. 表索引

  3. MVCC(Multiversioning并发控制)数据

  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

您可能需要清理ibdata1并将ibodata1以外的InnoDB表保存