Le problème est causé par le manque d'espace disque dans le dossier /tmp. Le volume /tmp est utilisé dans les requêtes qui nécessitent de créer des tables temporaires. Ces tables temporaires sont au format MyISAM même si la requête n'utilise que des tables avec InnoDB.
Voici quelques solutions :
- optimisez la requête afin qu'elle ne crée pas de tables temporaires (réécrivez la requête, divisez-la en plusieurs requêtes ou ajoutez des index appropriés, analysez le plan d'exécution avec pt-query-digest
et
EXPLAIN <query>
) Voir ceci Article Percona sur les tables temporaires . - optimisez MySQL pour qu'il ne crée pas de tables temporaires (sort_buffer_size, join_buffer_size). Voir :https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
- rendre les tables plus petites. Si possible, supprimez les lignes inutiles
- utilisez
SELECT table1.col1, table2,col1 ...
au lieu deselect *
pour n'utiliser que les colonnes dont vous avez besoin dans la requête, pour générer des tables temporaires plus petites - utiliser des types de données qui occupent moins d'espace
- ajouter plus d'espace disque sur le volume où réside le dossier /tmp
- modifiez l'utilisateur du dossier temporaire par mysql en définissant le
TMPDIR
variable d'environnement avant le démarrage de mysqld. PointTMPDIR
vers un dossier sur un volume de disque disposant de plus d'espace libre. Vous pouvez également utilisertmpdir
option dans/etc/my.cnf
ou--tmpdir
dans la ligne de commande du service mysqld. Voir :B.5.3.5 Où MySQL stocke les fichiers temporaires