Подтвердить что ты не робот

Как вы исправляете ошибку MySQL "Неверный ключевой файл", если вы не можете восстановить таблицу?

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

Вам нужно запустить эту команду из приглашения MySQL:

REPAIR TABLE tbl_name USE_FRM;

Из Документация MySQL по команде Repair:

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

Ответ 4

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

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

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

Руководство по MySQL - B.5.4.4. Где MySQL хранит временные файлы

Ответ 5

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

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

  • с кодировкой "utf8" , сопоставление "utf8_general_ci"
  • таблицы с кодировкой "utf8" и сопоставление "utf8_bin".
  • столбцы/поля таблицы имеют кодировку "utf8" и сопоставление "utf8_bin".

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

Ответ 6

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

Ответ 7

ТАБЛИЦА РЕМОНТА tbl_name USE_FRM;

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

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

Ответ 8

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

  • перейти на phpmyadmin
  • открыть проблемную таблицу
  • перейдите на вкладку "Операции" (в моей версии PMA).
  • внизу вы найдете ссылку "Восстановить таблицу"