sql >> Databáze >  >> RDS >> Mysql

Nesprávný soubor klíče pro tabulku '/tmp/#sql_3c51_0.MYI' zkuste jej opravit

Problém je způsoben nedostatkem místa na disku ve složce /tmp. Svazek /tmp se používá v dotazech, které vyžadují vytvoření dočasných tabulek. Tyto dočasné tabulky jsou ve formátu MyISAM, i když dotaz používá pouze tabulky s InnoDB.

Zde je několik řešení:

  • optimalizujte dotaz tak, aby nevytvářel dočasné tabulky (přepište dotaz, rozdělte jej na více dotazů nebo přidejte správné indexy, analyzujte plán provádění pomocí pt-query-digest a EXPLAIN <query> ) Viz toto Článek Percona o dočasných tabulkách .
  • optimalizujte MySQL tak, aby nevytvářelo dočasné tabulky (sort_buffer_size, join_buffer_size). Viz:https://dba.stackexchange.com/questions/53201/mysql-creates-temporary-tables-on-disk-how-do-i-stop-it
  • zmenšit stoly. Pokud je to možné, odstraňte nepotřebné řádky
  • použijte SELECT table1.col1, table2,col1 ... místo select * k použití pouze sloupců, které potřebujete v dotazu, ke generování menších dočasných tabulek
  • použijte datové typy, které zabírají méně místa
  • přidejte více místa na disku na svazek, kde se nachází složka /tmp
  • změňte uživatele dočasné složky pomocí mysql nastavením TMPDIR proměnná prostředí před spuštěním mysqld. Bod TMPDIR do složky na disku, která má více volného místa. Můžete také použít tmpdir možnost v /etc/my.cnf nebo --tmpdir v příkazovém řádku služby mysqld. Viz:B.5.3.5 Kde MySQL ukládá dočasné soubory


  1. Uložte výstup výběrového dotazu do jednoho pole v postgresu

  2. Opětovné připojení MySQL po vypršení časového limitu

  3. Jak mohu bezpečně uložit heslo v MySQL a ověřit se pro externí služby

  4. MySQL LAST_INSERT_ID() používané s příkazem INSERT s více záznamy