Я получил следующую ошибку из запроса MySQL.
#126 - Incorrect key file for table
Я даже не объявил ключ для этой таблицы, но у меня есть индексы. Кто-нибудь знает в чем может быть проблема?
mysql
mysql-error-126
Брайан
источник
источник
REPAIR TABLE
и все еще получаете это, плюс есть место,/tmp
вы можете попробовать просто перезагрузить сервер.Ответы:
По моему опыту, каждый раз, когда это происходило, это был полный диск.
РЕДАКТИРОВАТЬ
Также стоит отметить, что это может быть вызвано полным ramdisk при выполнении таких вещей, как изменение большой таблицы, если у вас настроен ramdisk. Вы можете временно закомментировать строку ramdisk, чтобы разрешить такие операции, если вы не можете увеличить ее размер.
источник
/tmp
есть небольшая файловая система tmpfs, и у mysql не хватило места для записи туда временной таблицы. Мне пришлось установитьtmpdir
переменную конфигурации, как указано на mysql.comПрежде всего, вы должны знать, что ключи и индексы в MySQL являются синонимами. Если вы посмотрите документацию по синтаксису CREATE TABLE , вы можете прочитать:
Ошибка, которую вы получаете, может быть вызвана двумя причинами:
В первом случае вы увидите, что добавление ограничения к вашему запросу может временно решить проблему. Если это сработает, у вас, вероятно, есть
tmp
папка, которая слишком мала для размера запросов, которые вы пытаетесь выполнить. Затем вы можете решить:tmp
увеличить или уменьшить количество запросов! ;)Иногда
tmp
он достаточно велик, но все равно заполняется, в таких ситуациях вам нужно выполнить некоторую ручную очистку.Во втором случае есть актуальные проблемы с данными MySQL. Если вы можете легко повторно вставить данные, я бы посоветовал просто отбросить / воссоздать таблицу и повторно вставить данные. Если вы не можете, вы можете попробовать отремонтировать стол на месте с помощью REPAIR table . Обычно это длительный процесс, который вполне может потерпеть неудачу.
Посмотрите полное сообщение об ошибке, которое вы получите:
В сообщении упоминается, что вы можете попробовать его отремонтировать. Кроме того, если вы посмотрите на фактический FILEPATH, который вы получите, вы сможете узнать больше:
если это что-то вроде,
/tmp/#sql_ab34_23f
это означает, что MySQL необходимо создать временную таблицу из-за размера запроса. Он хранит его в / tmp, и что в вашем / tmp недостаточно места для этой временной таблицы.если вместо этого он содержит имя реальной таблицы, это означает, что эта таблица, скорее всего, повреждена, и вам следует ее восстановить.
Если вы определили, что ваша проблема связана с размером / tmp, просто прочтите этот ответ на аналогичный вопрос об исправлении: MySQL, Ошибка 126: Неверный ключевой файл для таблицы .
источник
Следуя этим инструкциям, я смог воссоздать каталог tmp и исправить проблему:
Отобразите все файловые системы и их использование на диске в удобочитаемой форме:
Найдите процессы, файлы которых открыты в
/tmp
Затем размонтируйте
/tmp
и/var/tmp
:Затем удалите поврежденный файл раздела:
Затем создайте новый красивый:
Обратите внимание, что, отредактировав Perl-скрипт securetmp, вы можете вручную установить размер каталога tmp самостоятельно, однако простой запуск скрипта увеличил размер каталога tmp на нашем сервере примерно с 450 МБ до 4,0 ГБ.
источник
Ошибка № 126 обычно возникает при повреждении таблицы. Лучший способ решить эту проблему - произвести ремонт. Эта статья может помочь:
http://dev.mysql.com/doc/refman/5.0/en/repair-table.html
источник
Я получил эту ошибку , когда я установил
ft_min_word_len = 2
вmy.cnf
, что снижает минимальную длину слов в полнотекстовом индексе 2, от значения по умолчанию 4.Ремонт стола устранил проблему.
источник
Попробуйте использовать ограничение в вашем запросе. Это из-за полного диска, как сказал @Monsters X.
Я также столкнулся с этой проблемой и решил с помощью ограничения в запросе, потому что там были тысячи записей. Теперь работает хорошо :)
источник
Я знаю, что это старая тема, но ни одно из упомянутых решений не помогло мне. Я сделал еще кое-что, что сработало:
Тебе надо:
источник
источник
Я исправил эту проблему с помощью:
Может помогает
источник
table
ENGINE = MyISAM;Перейти
/etc/my.cnf
и прокомментироватьtmpfs
Это решает проблему.
Я выполнил команду, предложенную в другом ответе, и, хотя каталог небольшой, он был пуст, поэтому проблема не была в пространстве.
источник
Попробуйте запустить команду восстановления для каждой из таблиц, участвующих в запросе.
Используйте администратора MySQL, перейдите в Каталог -> Выберите каталог -> Выберите таблицу -> Нажмите кнопку «Обслуживание» -> Восстановить -> Использовать FRM.
источник
Теперь другие ответы решили это для меня. Оказалось, что переименование столбца и индекса в одном запросе вызвало ошибку.
Не работает:
Работы (2 заявления):
Это было на MariaDB 10.0.20. Ошибок с тем же запросом в MySQL 5.5.48 не было.
источник
Тогда есть ошибка:
mysql> таблица восстановления f_scraper_banner_details;
Это сработало для меня
источник
Моя проблема возникла из-за неправильного запроса. Я ссылался на таблицу в FROM, на которую не ссылались в SELECT.
пример:
, users u
это то, что вызывало у меня проблему. Удаление решило проблему.Для справки это было в среде разработки CodeIgniter.
источник
Я получил это сообщение при записи в таблицу после уменьшения ft_min_word_len (минимальная длина слова для полного текста). Чтобы решить эту проблему, заново создайте индекс, исправив таблицу.
источник
mysqlcheck -r -f -uroot -p --use_frm имя_бд
обычно добьется цели
источник