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.


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.


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.


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.


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

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


11

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


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.


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.


7

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

Mysql FQA


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.


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

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”.]


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 /

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


2

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

sudo service mysql stop

sudo service mysql start


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.


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.


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.


1

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


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.


1

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


-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á


a resposta é muito datada.
Evan Carroll
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.