El problema se debe a la falta de espacio en disco en la carpeta /tmp. El volumen /tmp se usa en consultas que requieren crear tablas temporales. Estas tablas temporales están en formato MyISAM incluso si la consulta usa solo tablas con InnoDB.
Aquí hay algunas soluciones:
- optimice la consulta para que no cree tablas temporales (reescriba la consulta, divídala en varias consultas o agregue índices adecuados, analice el plan de ejecución con pt-query-digest
y
EXPLAIN <query>
) Vea esto Artículo de Percona sobre tablas temporales . - optimice MySQL para que no cree tablas temporales (sort_buffer_size, join_buffer_size). Ver:https://dba.stackexchange.com/questions/53201/mysql-crea-temporary-tables-on-disk-how-do-i-stop-it
- haga las mesas más pequeñas. Si es posible, elimine las filas innecesarias
- use
SELECT table1.col1, table2,col1 ...
en lugar deselect *
para usar solo las columnas que necesita en la consulta, para generar tablas temporales más pequeñas - usar tipos de datos que ocupen menos espacio
- agregue más espacio en disco en el volumen donde reside la carpeta /tmp
- cambie el usuario de la carpeta temporal por mysql configurando el
TMPDIR
variable de entorno antes del inicio de mysqld. PuntoTMPDIR
a una carpeta en un volumen de disco que tenga más espacio libre. También puede usartmpdir
opción en/etc/my.cnf
o--tmpdir
en la línea de comando del servicio mysqld. Consulte:B.5.3.5 Dónde almacena MySQL los archivos temporales