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


126

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

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

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


1
Я видел, как это чаще всего происходит, когда в базовой файловой системе заканчиваются свободные inodes. Проверьте с помощью df -hi. Обычно что-то заполняет его множеством небольших файлов, например, файлов сеанса php, которые не очищаются.
Zrin

Ответы:


260

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

sudo service mysql stop

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

cd /var/lib/mysql/$DATABASE_NAME

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

myisamchk -r $TABLE_NAME

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

myisamchk -r -v -f $TABLE_NAME

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

sudo service mysql start

3
Я пробовал команду выше, я получаю эту ошибку Не могу создать новый временный файл: 'xzclf_ads.TMD'
CryptoMiningPoolSetupYiimp

2
Ну что, диск действительно заполнен? Вы можете попробовать запустить "df -h"? Скорее всего, это так, и вам следует освободить место ... Во время восстановления таблицы он использует некоторое дисковое пространство для записи во временную таблицу. Как видно из сообщения об ошибке, он записывается в вашу папку / tmp /
Александр Вучетич

13
Пришлось перейти /var/lib/mysql/<database>и бежать myisamchk -r -v -f ./<table name>.
Линус Олеандр

5
У меня myisam_sort_buffer_size is too smallошибка, поэтому у меня сработала эта команда:myisamchk -r -v --sort_buffer_size=2G <table_name>
душан

1
Вау, я думал, что весь мой веб-сайт промокнут. Такое простое решение. Ты мой герой!
Энтони

105

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

repair table <table_name>;

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


Это было быстрое исправление! Была «плохая» таблица опций. Сначала убедитесь, что вы выбрали правильную базу данных!
jyllstuart

12

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

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

4

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

REPAIR TABLE <table_name> USE_FRM;

3

У меня myisamchk: error: myisam_sort_buffer_size is too smallкак ошибка.

Решение

myisamchk -r -v mysql/<DB_NAME>/<TABLE_NAME> --sort_buffer_size=2G

2

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


Где data_dir?
CMCDragonkai

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

1

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

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


0

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

  • Тип сервера: MySQL
  • Версия сервера: 5.7.23 - Сервер сообщества MySQL (GPL)
  • phpMyAdmin: Информация о версии: 4.7.7
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.