Таблица MySQL помечена как аварийная, и последнее (автоматическое?) восстановление не удалось

Я восстанавливал эту таблицу, внезапно сервер завис, и когда я вернулся, все таблицы в порядке, но эта показывает «используется», и когда я пытаюсь восстановить, она не продолжается.

ОШИБКА 144 - Таблица «./extas_d47727/xzclf_ads» помечена как аварийная, и последнее (автоматическое?) восстановление не удалось

Что я могу сделать, чтобы отремонтировать его?


person CryptoMiningPoolSetupYiimp    schedule 12.01.2012    source источник
comment
Я видел, что это в основном происходит, когда в базовой файловой системе заканчиваются свободные индексные дескрипторы. Проверьте с помощью df -hi. Обычно что-то заполняет его множеством небольших файлов, например, например. php файлы сеанса, которые не очищаются.   -  person Zrin    schedule 21.10.2014
comment
Это обсуждение, вероятно, предназначено только для таблиц MyISAM.   -  person Rick James    schedule 13.04.2021


Ответы (10)


Если ваш процесс MySQL запущен, остановите его. В Дебиане:

sudo service mysql stop

Перейдите в папку с данными. В Дебиане:

cd /var/lib/mysql/$DATABASE_NAME

Попробуйте запустить:

myisamchk -r $TABLE_NAME

Если это не сработает, вы можете попробовать:

myisamchk -r -v -f $TABLE_NAME

Вы можете снова запустить свой сервер MySQL. В Дебиане:

sudo service mysql start
person Aleksandar Vucetic    schedule 12.01.2012
comment
Я пробовал команду выше, я получаю эту ошибку Не могу создать новый временный файл: «xzclf_ads.TMD» - person CryptoMiningPoolSetupYiimp; 13.01.2012
comment
Спасибо, я попробовал, похоже, это сработало, но перестало выдавать эту ошибку? myisamchk: Диск заполнен, пишет «/tmp/STp7Q4qR» (код ошибки: 28). Ожидание освобождения места... (Ожидайте задержку до 60 секунд для продолжения работы сервера после освобождения места на диске) myisamchk: Повторите попытку через 60 секунд. Сообщение перепечатано через 600 секунд - person CryptoMiningPoolSetupYiimp; 13.01.2012
comment
Ну, диск действительно заполнен? Можете ли вы попробовать запустить df -h ? Скорее всего, это так, и вам следует освободить немного места... Во время восстановления таблицы он использует некоторое пространство на диске для записи во временную таблицу. Как вы можете видеть из сообщения об ошибке, оно пишет в вашу папку /tmp/ - person Aleksandar Vucetic; 13.01.2012
comment
Мне пришлось перейти к /var/lib/mysql/<database> и запустить myisamchk -r -v -f ./<table name>. - person Linus Oleander; 19.03.2013
comment
У меня ошибка myisam_sort_buffer_size is too small, поэтому у меня сработала эта команда: myisamchk -r -v --sort_buffer_size=2G <table_name> - person dusan; 22.05.2013
comment
Мой диск заполнился при этом, так что это не удалось. После очистки места и повторной попытки мне сказали, что он не может создать table_file_name.TMD. Я догадался, что это было потому, что он уже существовал, когда он потерпел неудачу раньше. После удаления этого файла все заработало. - person Tyler Collier; 18.09.2013
comment
Ничего себе, я думал, что весь мой веб-сайт был из шланга. Такое простое исправление. Ты мой герой! - person Anthony; 29.09.2013
comment
Это решило и мою проблему, спасибо. Использование параметра --force позволяет запустить восстановление, даже если что-то со структурой или информацией неверно. - person tribulant; 16.08.2017
comment
Столкнулся с ошибкой myisamchk: error: Not enough memory for blob at 541031156 (need 1953787962). Команда myisamchk --max-record-length=1048576 -r -v -f $TABLE_NAME помогла. Я также сначала создал резервную копию файла; может быть, хорошая общая предосторожность. - person Denis Drescher; 04.06.2019
comment
Вы спасли мой день. Спасибо ! - person spacebiker; 09.12.2020
comment
Спасибо, этот ответ работает для меня. - person José Ayrám; 09.12.2020
comment
Спас мой день (та) тоже! Спасибо! - person HMS; 16.07.2021

Попробуйте выполнить следующий запрос:

repair table <table_name>;

У меня была такая же проблема, и это решило мою проблему.

person cREcker    schedule 11.09.2014
comment
Это было быстрое решение! Была плохая таблица опций. Сначала убедитесь, что вы выбрали правильную базу данных! - person jyllstuart; 10.01.2019

Если это дает вам отказ в разрешении при переходе в /var/lib/mysql, используйте следующее решение

$ cd /var/lib/
$ sudo -u mysql myisamchk -r -v -f mysql/<DB_NAME>/<TABLE_NAME>
person crazycrv    schedule 08.11.2013

Мне нужно было добавить USE_FRM в оператор восстановления, чтобы заставить его работать.

REPAIR TABLE <table_name> USE_FRM;
person Mark    schedule 10.05.2017

Это был мой опыт решения этой проблемы. Я использую XAMPP. Я получал ошибку ниже

 Fatal error: Can't open and lock privilege tables: Table '.\mysql\db' is marked as crashed and last (automatic?) repair failed  

Вот что я сделал, чтобы решить эту проблему, шаг за шагом:

  1. перешел в папку C:\xampp\mysql. Для вас местоположение может быть другим, убедитесь, что вы находитесь в правильном расположении файла.
  2. создал бэкап папки data как data-old.
  3. скопировал папку mysql из C:\xampp\mysql\backup
  4. вставил его внутрь C:\xampp\mysql\data\, заменив старую папку mysql.

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

Примечание. Я всегда предпочитал решать эту проблему с помощью команды repair, но в моем случае мне вообще не удалось запустить mysql, и я не смог заставить работать команду myisamchk.

Независимо от того, что вы делаете, создавайте периодические резервные копии вашей базы данных.

person ashish    schedule 12.02.2021
comment
Один небольшой комментарий: использование этого решения, которое сработало и для меня, может потребовать от вас переопределения пароля MySQL. В пользовательском интерфейсе XAMPP откройте оболочку и используйте команду # mysqladmin -u root password Введите пароль, который вы использовали ранее, и подтвердите пароль. Не работает снова. - person Gilad Tiram; 05.06.2021

Я получил myisamchk: error: myisam_sort_buffer_size is too small как ошибку.

Решение

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G
person ThorstenS    schedule 26.02.2015

Перейдите к data_dir и удалите файл Your_table.TMP после восстановления таблицы <Your_table>.

person Humbertosms    schedule 02.01.2015
comment
найдите его с помощью этой команды grep -r datadir /etc/mysql/. Должно быть /var/lib/mysql под debian и ubuntu. - person ThorstenS; 10.02.2016

Это 100% решение. Я попробовал это сам.

myisamchk -r -v -f --sort_buffer_size=128M --key_buffer_size=128M /var/lib/mysql/databasename/tablename

person cryptox1    schedule 19.06.2019

Если это произошло с вашей установкой XAMPP, просто скопируйте файлы global_priv.MAD и global_priv.MAI из ./xampp/mysql/backup/mysql/ в ./xampp/mysql/data/mysql/.

person Qrzysio    schedule 24.01.2021
comment
решение сработало для меня, только в моем случае таблица была ./mysql/db. Я попытался запустить myisamchk, но если передать «db» в качестве имени таблицы, он говорит «файл не найден», если указать расширение, я получаю ... не файл db - person Marlon; 26.01.2021

Я попробовал варианты в существующих ответах, в основном тот, который помечен как правильный, который не работал в моем сценарии. Однако сработало использование phpMyAdmin. Выберите базу данных, а затем выберите таблицу, в нижнем раскрывающемся меню выберите «Восстановить таблицу».

  • Тип сервера: MySQL
  • Версия сервера: 5.7.23 — MySQL Community Server (GPL)
  • phpMyAdmin: Информация о версии: 4.7.7
person user3417257    schedule 21.10.2018