'Tabela está cheia' erro na tabela com 3 linhas

1

A cada poucas semanas, eu recebo a mensagem The table 'ttrss_users' is full de uma instalação do link (um aplicativo leitor de RSS escrito em PHP ).

É sempre a tabela de usuários (InnoDB), que tem o seguinte layout:

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

A consulta que causa o erro é: UPDATE ttrss_users SET last_login = NOW() WHERE id = x e afeta apenas esta tabela (nenhuma outra tabela ou banco de dados neste servidor).

A única solução que encontrei é reiniciar o servidor. Alterar MAX_ROWS e AVG_ROW_LENGTH via ALTER TABLE parece afetar apenas as tabelas MyISAM.

Alguma idéia?

    
por ercpe 21.10.2011 / 18:52

1 resposta

2

O problema está em innodb_data_file_path.

De acordo com seu comentário: innodb_data_file_path = ibdata1:10M:autoextend:max:1024M

O arquivo ibdata1 hospeda quatro tipos de dados

  1. Dados da tabela

  2. Índices da tabela

  3. Dados do MVCC (Controle de Concorrência Multiversionada)

  4. Metadados de tabela

Pode simplesmente não haver espaço para gravar dados do MVCC em torno dos valores antigos da linha em ttrss_users que precisam ser atualizados. Tente remover a restrição de tamanho no tamanho de ibdata1

  • Passo 01) Mude a linha em /etc/my.cnf desta

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

para isso

'innodb_data_file_path = ibdata1:10M:autoextend'
  • Etapa 02) service mysql restart

  • Passo 03) Tente sua instrução UPDATE

Experimente!

ATUALIZAÇÃO 2011-10-21 17:03 EDT

Você pode querer limpar ibdata1 e manter Tabelas InnoDB fora do ibdata1

    
por 21.10.2011 / 21:30

Tags