1114 (HY000): La mesa está llena

114

Estoy tratando de agregar una fila a una InnoDBtabla con una simple consulta:

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

Pero cuando intento esta consulta, obtengo lo siguiente:

ERROR 1114 (HY000): La mesa zip_codesestá llena

Haciendo un

SELECT COUNT(*) FROM zip_codes

me da 188,959 filas, que no parecen demasiadas considerando que tengo otra tabla con 810,635 filas en esa misma base de datos.

Soy bastante inexperto con el InnoDB enginey nunca experimenté este problema con MyISAM. ¿Cuáles son algunos de los posibles problemas aquí?

EDITAR: Esto solo ocurre cuando se agrega una fila a la zip_codestabla.

Wickethewok
fuente
¿Ocurre el error cuando intenta insertar en cualquier tabla, o solo en zip_codes?
Chad Birch

Respuestas:

92

EDITAR: Primero verifique, si no se quedó sin espacio en disco, antes de resolver la resolución relacionada con la configuración.

Parece tener un tamaño máximo demasiado bajo para su innodb_data_file_pathen su my.cnf, En este ejemplo

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

no puede alojar más de 512 MB de datos en todas las tablas innodb combinadas.

Tal vez debería cambiar a un esquema innodb-per-table usando innodb_file_per_table.

Martín C.
fuente
C donde obtenemos este archivo my.cnf en ubuntu
3
@Nadh En Ubuntu 16.04 es parte de /etc/mysql/y se divide parcialmente en archivos adicionales en/etc/mysql/conf.d
Martin C.
El mío funcionó después de agregar la innodb_data_file_pathlínea /etc/mysql/mysql.conf.d/mysqld.cnfy reiniciar los servicios mysqlyapache2
Timmah
81

Otra posible razón es que la partición está llena, esto es lo que me pasó ahora.

maaartinus
fuente
1
Esto debería ser siempre lo primero que debe comprobarse. Siempre vuelva al cable de alimentación, me he encontrado con esto muchas veces.
Steven Church
1
Me ahorraste algunas horas intentando cambiar la configuración de mysql. La partición primaria estaba llena. Tuve que mover la base de datos mysql a la partición de datos y luego crear un enlace suave
Ganesh Krishnan
2
utilizar df -hpara comprobar el tamaño del disco
Amit Bera
25

También obtendrá el mismo error ERROR 1114 (HY000): la tabla '# sql-310a_8867d7f' está llena

si intenta agregar un índice a una tabla que está usando el motor de almacenamiento MEMORY.

Tarjeta verde
fuente
Esto me sucedió, pero parecía que mi cliente estaba usando una sintaxis incorrecta. Al agregar el mismo índice con un simple ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);funcionó.
thephper
22

Debe modificar el límite de límite establecido en my.cnf para las tablas INNO_DB. Este límite de memoria no se establece para tablas individuales, se establece para todas las tablas combinadas.

Si desea que la memoria se extienda automáticamente a 512 MB

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

Si no conoce el límite o no quiere poner un límite máximo, puede modificarlo así

innodb_data_file_path = ibdata1:10M:autoextend
Daniel Luca CleanUnicornio
fuente
Alojamos nuestro ddbb en Amazon y se configuró con autoextender. Pero tuvimos el mismo problema que supongo que se debió a alcanzar el límite almacenado configurado
borjab
12

Este error también aparece si la partición en la que tmpdirreside se llena (debido a una tabla alterada u otra

fimbulvetr
fuente
11

En mi caso, esto se debió a que la partición que alojaba el archivo ibdata1 estaba llena.

skiphoppy
fuente
10

Es posible que se esté quedando sin espacio en la partición donde se almacenan las tablas mysql (generalmente / var / lib / mysql) o donde se almacenan las tablas temporales (generalmente / tmp).

Es posible que desee: - controlar su espacio libre durante la creación del índice. - apunte la variable tmpdir MySQL a una ubicación diferente. Esto requiere reiniciar el servidor.

Julio
fuente
8

Yo también enfrenté este error al importar un archivo de base de datos sql de 8GB. Revisé mi unidad de instalación de mysql. No quedaba espacio en el camino. Así que obtuve algo de espacio eliminando elementos no deseados y volví a ejecutar el comando de importación de mi base de datos. Esta vez fue un éxito.

Arun Kumar
fuente
7

Si usa NDBCLUSTER como motor de almacenamiento, debe aumentar DataMemoryy IndexMemory.

Mysql FQA

metdos
fuente
6

A menos que haya habilitado la innodb_file_per_tableopción, InnoDBmantiene todos los datos en un archivo, generalmente llamado ibdata1.

Verifique el tamaño de ese archivo y verifique que tenga suficiente espacio en disco en la unidad en la que reside.

Quassnoi
fuente
5

teníamos: SQLSTATE [HY000]: Error general: 1114 La tabla 'catalog_product_index_price_bundle_sel_tmp' está llena

resuelto por:

editar configuración de db:

nano /etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • reiniciar db
Sition
fuente
1
Esas configuraciones de 512M son peligrosas. Controlan el tamaño máximo de memoria para las tablas temporales en selecciones complejas. No es solo "por conexión", sino también "por tabla tmp". Por lo tanto, esos valores podrían hacer que te quedes sin RAM.
Rick James
4

Para citar los documentos MySQL.

El motor de almacenamiento InnoDB mantiene tablas InnoDB dentro de un espacio de tabla que se puede crear a partir de varios archivos. Esto permite que una tabla exceda el tamaño máximo de archivo individual. El espacio de tabla puede incluir particiones de disco sin formato, lo que permite tablas extremadamente grandes. El tamaño máximo de espacio de tabla es 64 TB.

Si está utilizando tablas InnoDB y se queda sin espacio en el espacio de tabla InnoDB. En este caso, la solución es ampliar el espacio de tabla InnoDB. Consulte la Sección 13.2.5, [“Agregar, eliminar o cambiar el tamaño de los archivos de registro y datos de InnoDB”.]

Ólafur Waage
fuente
4

en mi caso, es solo porque el servidor mysql se ejecuta junto con una aplicación, que escribe demasiados registros que el disco está lleno.

puede comprobar si el disco tiene suficiente espacio de uso

df -h

si el porcentaje de uso del disco es del 100%, puede usar este comando para encontrar qué directorio es demasiado grande

du -h -d 1 /
Kai
fuente
4

USUARIOS DE DOCKER: Esto también sucede cuando ha alcanzado alrededor del 90% del límite de tamaño de la imagen de Docker (parece que se necesita un 10% para el almacenamiento en caché). La redacción es confusa, ya que esto simplemente significa la cantidad de espacio en disco que Docker puede usar para básicamente todo.

Para solucionarlo, vaya a la configuración del escritorio de Docker> Disco> mueva el control deslizante un poco más hacia la derecha> Aplicar.

ingrese la descripción de la imagen aquí

Sliq
fuente
2

En CentOS 7, simplemente detener e iniciar el servicio MySQL solucionó esto por mí.

sudo service mysql stop

sudo service mysql start

crmpicco
fuente
Curiosamente, esto también funcionó para mí ... No tenía particiones que estuvieran llenas en más del 80% y solo reiniciarlo lo solucionó.
n0nag0n
2

Enfrenté el mismo problema debido al poco espacio en disco. Y la partición que aloja el archivo ibdata1, que es el espacio de tabla del sistema para la infraestructura InnoDB, estaba llena.

Saveendra Ekanayake
fuente
2

Estaba experimentando este problema ... en mi caso, me quedaría sin almacenamiento en mi servidor dedicado. Compruebe que si todo lo demás falla y considere aumentar el espacio en disco o eliminar datos o archivos no deseados.

NotJay
fuente
1

En mi caso, la memoria del servidor estaba llena, por lo que la base de datos no pudo escribir los datos temporales. Para solucionarlo solo tienes que hacer un hueco en tu disco.

Pierre-Yves Guillemet
fuente
1

Solucioné este problema aumentando la cantidad de memoria disponible para la VM vagabunda donde se encontraba la base de datos.

yvoloshin
fuente
1

En mi caso, estaba intentando ejecutar un comando alter table y el espacio disponible en disco era menor que el tamaño de la tabla. Una vez que aumenté el espacio en disco, el problema desapareció.

Pratik Singhal
fuente
1

Este disco está lleno en / var / www / mysql

wukong
fuente
-1

Este también podría ser el límite de InnoDB para el número de transacciones abiertas:

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

en 1024 transacciones, que tienen registros de deshacer (como en, editaron cualquier dato), InnoDB no funcionará


fuente
La respuesta está anticuada.
Evan Carroll