1114 (HY000): A mesa está cheia

114

Estou tentando adicionar uma linha a uma InnoDBtabela com uma consulta simples:

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');

Mas quando tento essa consulta, obtenho o seguinte:

ERROR 1114 (HY000): A mesa zip_codesestá cheia

Fazendo um

SELECT COUNT(*) FROM zip_codes

me dá 188.959 linhas, o que não parece muitos, considerando que tenho outra tabela com 810.635 linhas no mesmo banco de dados.

Sou bastante inexperiente com o InnoDB enginee nunca tive esse problema com ele MyISAM. Quais são alguns dos problemas potenciais aqui?

EDITAR: Isso ocorre apenas ao adicionar uma linha à zip_codestabela.

Wickethewok
fonte
O erro ocorre ao tentar inserir em alguma tabela ou apenas na zip_codes?
Chad Birch,

Respostas:

92

EDIT: Primeiro verifique, se você não ficou sem espaço em disco, antes de resolver para a resolução relacionada à configuração.

Você parece ter um tamanho máximo muito baixo para o innodb_data_file_pathseu my.cnf, neste exemplo

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

você não pode hospedar mais de 512 MB de dados em todas as tabelas do innodb combinadas.

Talvez você deva mudar para um esquema innodb-per-table usando innodb_file_per_table.

Martin C.
fonte
C onde obtemos este arquivo my.cnf no ubuntu
3
@Nadh No Ubuntu 16.04 é parte /etc/mysql/e está parcialmente dividido em arquivos adicionais em/etc/mysql/conf.d
Martin C.
O meu funcionou depois de adicionar a innodb_data_file_pathlinha /etc/mysql/mysql.conf.d/mysqld.cnfe reiniciar os serviços mysqleapache2
Timmah
81

Outra possível razão é a partição estar cheia - é exatamente o que aconteceu comigo agora.

maaartinus
fonte
1
Isso deve ser sempre a primeira coisa a verificar. Sempre volte ao cabo de alimentação, já me deparei com isso muitas vezes.
Steven Church
1
Você me economizou algumas horas tentando alterar a configuração do mysql. A partição primária estava cheia. Tive que mover o banco de dados mysql para a partição de dados e então criar um link
virtual
2
use df -hpara verificar o tamanho do disco
Amit Bera
25

Você também obterá o mesmo erro ERROR 1114 (HY000): A tabela '# sql-310a_8867d7f' está cheia

se você tentar adicionar um índice a uma tabela que está usando o mecanismo de armazenamento MEMORY.

Cartão Verde
fonte
Isso aconteceu comigo, mas parecia que meu cliente estava usando uma sintaxe errada. Ao adicionar o mesmo índice com um simples ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);funcionou.
thephper
22

Você precisa modificar o limite definido em my.cnf para as tabelas INNO_DB. Este limite de memória não é definido para tabelas individuais, ele é definido para todas as tabelas combinadas.

Se você quiser que a memória se estenda automaticamente para 512 MB

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

Se você não sabe o limite ou não quer colocar um limite máximo, você pode modificá-lo assim

innodb_data_file_path = ibdata1:10M:autoextend
Daniel Luca CleanUnicorn
fonte
Hospedamos nosso ddbb na Amazon e ele foi configurado com autoextend. Mas tivemos o mesmo problema que suponho ser devido ao alcance do limite armazenado configurado
borjab
12

Este erro também aparece se a partição na qual tmpdirreside ficar cheia (devido a uma tabela de alteração ou outro

fimbulvetr
fonte
11

No meu caso, isso aconteceu porque a partição que hospeda o arquivo ibdata1 estava cheia.

skiphoppy
fonte
10

Você pode estar ficando sem espaço na partição onde as tabelas mysql são armazenadas (geralmente / var / lib / mysql) ou onde as tabelas temporárias estão armazenadas (geralmente / tmp).

Você pode querer: - monitorar seu espaço livre durante a criação do índice. - aponte a variável tmpdir MySQL para um local diferente. Isso requer a reinicialização do servidor.

Julio
fonte
8

Eu também enfrentei esse erro ao importar um arquivo de banco de dados sql de 8 GB. Verifiquei minha unidade de instalação do mysql. Não havia mais espaço na unidade. Consegui algum espaço removendo itens indesejados e executei novamente meu comando de importação de banco de dados. Desta vez foi um sucesso.

Arun Kumar
fonte
7

Se você usar NDBCLUSTER como mecanismo de armazenamento, deverá aumentar DataMemorye IndexMemory.

Mysql FQA

metdos
fonte
6

A menos que você habilite a innodb_file_per_tableopção, InnoDBmantém todos os dados em um arquivo, normalmente chamado ibdata1.

Verifique o tamanho desse arquivo e verifique se há espaço em disco suficiente na unidade em que ele reside.

Quassnoi
fonte
5

tivemos: SQLSTATE [HY000]: Erro geral: 1114 A tabela 'catalog_product_index_price_bundle_sel_tmp' está cheia

resolvido por:

editar configuração do banco de dados:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • reiniciar db
Sition
fonte
1
Essas configurações de 512M são perigosas. Eles controlam o tamanho máximo da memória para tabelas temporárias em seleções complexas. Não é apenas "por conexão", mas também "por tabela tmp". Portanto, esses valores podem facilmente fazer com que você fique sem RAM.
Rick James
4

Para citar os documentos do MySQL.

O mecanismo de armazenamento InnoDB mantém tabelas InnoDB dentro de um espaço de tabela que pode ser criado a partir de vários arquivos. Isso permite que uma tabela exceda o tamanho máximo de arquivo individual. O espaço de tabela pode incluir partições de disco brutas, o que permite tabelas extremamente grandes. O tamanho máximo do espaço de tabela é 64 TB.

Se você estiver usando tabelas InnoDB e ficar sem espaço no espaço de tabela InnoDB. Nesse caso, a solução é estender o espaço de tabela InnoDB. Consulte a Seção 13.2.5, [“Adicionando, removendo ou redimensionando dados InnoDB e arquivos de registro”.]

Ólafur Waage
fonte
4

no meu caso, é só porque o servidor mysql roda junto com um aplicativo, que escreve muitos logs que o disco está cheio.

você pode verificar se o disco tem espaço suficiente para usar

df -h

se a porcentagem de uso do disco for 100%, você pode usar este comando para descobrir qual diretório é muito grande

du -h -d 1 /
Kai
fonte
4

USUÁRIOS DO DOCKER: Isso também acontece quando você atinge cerca de 90% do limite de tamanho da imagem do Docker (parece que 10% são necessários para o cache ou algo assim). O texto é confuso, pois isso significa simplesmente a quantidade de espaço em disco que o Docker pode usar para basicamente tudo.

Para corrigir, vá para as configurações da área de trabalho do Docker> Disco> mova o controle deslizante um pouco mais para a direita> Aplicar.

insira a descrição da imagem aqui

Sliq
fonte
2

No CentOS 7, simplesmente parar e iniciar o serviço MySQL corrigiu isso para mim.

sudo service mysql stop

sudo service mysql start

crmpicco
fonte
Estranhamente isso funcionou para mim também ... Não tinha nenhuma partição que estava mais de 80% cheia e apenas reiniciar corrigiu.
n0nag0n
2

Eu enfrentei o mesmo problema por causa de pouco espaço em disco. E a partição que hospeda o arquivo ibdata1, que é o espaço de tabela do sistema para a infraestrutura InnoDB, estava cheia.

Saveendra Ekanayake
fonte
2

Eu estava tendo esse problema ... no meu caso, fiquei sem armazenamento no meu servidor dedicado. Verifique se tudo o mais falhar e considere aumentar o espaço em disco ou remover dados ou arquivos indesejados.

NotJay
fonte
1

No meu caso, a memória do servidor estava cheia, então o banco de dados não pôde gravar os dados temporários. Para resolvê-lo você só precisa fazer algum lugar na sua unidade.

Pierre-Yves Guillemet
fonte
1

Corrigi esse problema aumentando a quantidade de memória disponível para a VM vagrant onde o banco de dados estava localizado.

Yvoloshin
fonte
1

No meu caso, estava tentando executar um comando alter table e o espaço em disco disponível era menor que o tamanho da tabela. Uma vez, aumentei o espaço em disco e o problema foi embora.

Pratik Singhal
fonte
1

Este disco está cheio em / var / www / mysql

wukong
fonte
-1

Este também pode ser o limite InnoDB para o número de transações abertas:

http://bugs.mysql.com/bug.php?id=26590

em 1024 transações, que têm registros de desfazer (como em, editou quaisquer dados), o InnoDB não funcionará


fonte
a resposta é muito datada.
Evan Carroll