每隔几个星期,我收到一条消息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_ROWS
和AVG_ROW_LENGTH
似乎只影响MyISAM表。
有任何想法吗?
问题在于innodb_data_file_path。
根据你的评论: innodb_data_file_path = ibdata1:10M:autoextend:max:1024M
ibdata1文件包含四种types的数据
表数据
表索引
MVCC(Multiversioning并发控制)数据
表元数据
在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语句
试一试 !!!
您可能需要清理ibdata1并将ibodata1以外的InnoDB表保存