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
TMPDIRvariable de entorno antes del inicio de mysqld. PuntoTMPDIRa una carpeta en un volumen de disco que tenga más espacio libre. También puede usartmpdiropción en/etc/my.cnfo--tmpdiren la línea de comando del servicio mysqld. Consulte:B.5.3.5 Dónde almacena MySQL los archivos temporales