Как исправить ошибку MySQL «Неверный файл ключа», когда не удается восстановить таблицу? - PullRequest
36 голосов
/ 12 марта 2010

Я пытаюсь выполнить довольно большой запрос, который должен выполняться ночью для заполнения таблицы. Я получаю сообщение об ошибке Incorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it, но используемый мной механизм хранения данных (я полагаю, по умолчанию) не поддерживает восстановление таблиц.

как мне это исправить, чтобы я мог выполнить запрос?

Ответы [ 9 ]

47 голосов
/ 02 ноября 2010

Вы должны изменить местоположение временной папки MySQL, которая в большинстве случаев является '/ tmp', на папку с большим дисковым пространством. Измените его в конфигурационном файле MySQL.

Обычно на вашем сервере не хватает места на диске, где находится / tmp.

32 голосов
/ 16 августа 2011

Вам нужно будет запустить эту команду из командной строки MySQL:

REPAIR TABLE tbl_name USE_FRM;

С Документация MySQL по команде восстановления :

Опция USE_FRM доступна для использования, если отсутствует индексный файл .MYI или поврежден его заголовок . Эта опция говорит MySQL не доверять информации в заголовке файла .MYI и заново создавать ее, используя информацию из файла .frm. Этот вид ремонта нельзя выполнить с помощью myisamchk .

8 голосов
/ 12 марта 2010

Ваш запрос генерирует набор результатов настолько большой, что ему необходимо создать временную таблицу для хранения некоторых результатов или промежуточного продукта, использованного при создании результата.

Временная таблица создается в / var / tmp. Эта временная таблица может быть повреждена. Возможно, устройству, на котором строилась временная таблица, не хватило места. Однако обычно это приводит к ошибке «не хватает места». Возможно, что-то еще, работающее на вашей машине, забило временную таблицу.

Попробуйте переработать ваш запрос, чтобы использовать меньше места, или попробуйте перенастроить базу данных, чтобы больший или более безопасный раздел использовался для временных таблиц.

MySQL Manual - B.5.4.4. Где MySQL хранит временные файлы

1 голос
/ 08 апреля 2018

эта проблема связана с низкой доступностью дискового пространства определенного диска (c: \ или d: \ и т. Д.), Освободите часть памяти, и она заработает.

Спасибо Saikumar.P

1 голос
/ 20 июля 2017

Простое «РЕМОНТ таблицы» от PHPMYADMIN решило эту проблему для меня.

  1. перейдите к phpmyadmin
  2. откройте проблемную таблицу
  3. перейдите на вкладку Операции (вмоя версия PMA)
  4. внизу вы найдете ссылку "Ремонт таблицы"
1 голос
/ 08 июля 2017

СТОЛ РЕМОНТА tbl_name USE_FRM;

Команда запускается только тогда, когда тип MySQL «Storage Engine» должен быть «MyISAM»

Надеюсь, это поможет

1 голос
/ 04 июля 2016

В моем случае возникла проблема с местом на диске. Я удалил некоторые нежелательные военные файлы со своего сервера, и после этого все заработало.

1 голос
/ 12 марта 2010

Механизм хранения (MyISAM) поддерживает ремонтную таблицу. Вы должны быть в состоянии отремонтировать его.

Если восстановление завершится неудачно, это признак того, что таблица очень повреждена, у вас нет другого выбора, кроме как восстановить ее из резервных копий.

Если у вас есть другие системы (например, непроизводственные с теми же версиями программного обеспечения и схемой) с идентичной таблицей, то вы можете исправить это с помощью некоторого хакера (копирование файлов MYI с последующим восстановлением). 1005 *

По сути, хитрость заключается в том, чтобы в первую очередь не получить сломанные таблицы. Это означает, что вы всегда должны аккуратно выключать вашу БД, никогда не вылетать и не иметь проблем с оборудованием или питанием. На практике это маловероятно, поэтому, если долговечность имеет значение, вы можете подумать о более надежном механизме хранения данных.

0 голосов
/ 03 мая 2014

Применение правильной кодировки и сопоставления к базе данных, таблице и столбцам / полям.

Я создаю базу данных и структуру таблиц, используя sql запросы с одного сервера на другой. это создает структуру базы данных следующим образом:

  1. база данных с набором символов "utf8", сопоставление "utf8_general_ci"
  2. таблицы с набором символов "utf8" и сопоставлением "utf8_bin".
  3. столбцы / поля таблицы имеют кодировку "utf8" и сопоставление "utf8_bin".

Я изменяю параметры сортировки таблицы и столбца на utf8_general_ci, и это устраняет ошибку.

...