sql >> Database >  >> RDS >> Mysql

Onjuist sleutelbestand voor tabel '/tmp/#sql_3c51_0.MYI' probeer het te repareren

Het probleem wordt veroorzaakt door het gebrek aan schijfruimte in de /tmp-map. Het /tmp-volume wordt gebruikt in query's waarvoor tijdelijke tabellen moeten worden gemaakt. Deze tijdelijke tabellen hebben de MyISAM-indeling, zelfs als de query alleen tabellen met InnoDB gebruikt.

Hier zijn enkele oplossingen:

  • optimaliseer de query zodat er geen tijdelijke tabellen worden gemaakt (herschrijf de query, splits deze in meerdere query's of voeg de juiste indexen toe, analyseer het uitvoeringsplan met pt-query-digest en EXPLAIN <query> ) Zie deze Percona-artikel over tijdelijke tabellen .
  • optimaliseer MySQL zodat het geen tijdelijke tabellen maakt (sort_buffer_size, join_buffer_size). Zie:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
  • maak tabellen kleiner. Verwijder indien mogelijk onnodige rijen
  • gebruik SELECT table1.col1, table2,col1 ... in plaats van select * om alleen de kolommen te gebruiken die u in de query nodig hebt, om kleinere tijdelijke tabellen te genereren
  • gebruik gegevenstypen die minder ruimte innemen
  • voeg meer schijfruimte toe op het volume waar de map /tmp zich bevindt
  • wijzig de tijdelijke mapgebruiker door mysql door de TMPDIR in te stellen omgevingsvariabele voorafgaand aan het opstarten van mysqld. Punt TMPDIR naar een map op een schijfvolume met meer vrije ruimte. U kunt ook tmpdir . gebruiken optie in /etc/my.cnf of --tmpdir in de opdrachtregel van de mysqld-service. Zie:B.5.3.5 Waar MySQL tijdelijke bestanden opslaat


  1. 2 manieren om te zien of verouderde functies nog steeds worden gebruikt in een SQL Server-instantie

  2. Hoe kan ik het ID van de ingevoegde rij retourneren met behulp van Voorbereide verklaring?

  3. Wanneer gebruik je LEFT JOIN en wanneer INNER JOIN?

  4. Aanbevelingen voor routinematige back-up van inhoud