O problema é causado pela falta de espaço em disco na pasta /tmp. O volume /tmp é usado em consultas que exigem a criação de tabelas temporárias. Essas tabelas temporárias estão no formato MyISAM mesmo se a consulta estiver usando apenas tabelas com InnoDB.
Aqui estão algumas soluções:
- otimize a consulta para que ela não crie tabelas temporárias (reescreva a consulta, divida-a em várias consultas ou adicione índices adequados, analise o plano de execução com pt-query-digest
e
EXPLAIN <query>
) Veja este Artigo Percona sobre tabelas temporárias . - otimize o MySQL para que ele não crie tabelas temporárias (sort_buffer_size, join_buffer_size). Veja:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- diminua as mesas. Se possível, exclua as linhas desnecessárias
- use
SELECT table1.col1, table2,col1 ...
em vez deselect *
para usar apenas as colunas que você precisa na consulta, para gerar tabelas temporárias menores - use tipos de dados que ocupam menos espaço
- adicione mais espaço em disco no volume onde reside a pasta /tmp
- altere o usuário da pasta temporária pelo mysql definindo o
TMPDIR
variável de ambiente antes da inicialização do mysqld. PontoTMPDIR
para uma pasta em um volume de disco que tenha mais espaço livre. Você também pode usartmpdir
opção em/etc/my.cnf
ou--tmpdir
na linha de comando do serviço mysqld. Veja:B.5.3.5 Onde o MySQL armazena arquivos temporários