Эта простенькая инструкция расскажет как восстановить MySQL таблицу формата MyISAM, при ошибке:
Table 'crashed-table' is marked as crashed and last (automatic?) repair failed
Причины такой ошибки могут быть разные, рассмотрим простое решение на основе встроенной утилиты myisamchk. Нам потребуется доступ в консоль сервера, локально или по SSH.
Путь к файлам базы данных может быть разным, в зависимости от настроек сервера и установленной ОС, но как правило он такой, его и возьмём для примера:
cd /var/lib/mysql/
В этой директории находятся подпапки с именами баз данных, нужно выбрать ту, в которой находится неисправная таблица:
cd ./need-database
Внутри находятся файлы таблиц, здесь и запустим утилиту проверки таблицы с ключом -r (восстановление):
myisamchk -r crashed-table
Результатом работы утилиты может быть следующий лог:
- recovering (with sort) MyISAM-table 'crashed-table'
Data records: 0
- Fixing index 1
- Fixing index 2
- Fixing index 3
- Fixing index 4
- Fixing index 5
- Fixing index 6
Data records: 128
Иногда полезно использование режимов —verbose и —force:
myisamchk -r -v -f crashed-table
Если есть возможность, перед использованием утилиты myisamchk, следует остановить MySQL сервер, и запустить его после восстановления таблиц. Ниже указана полная последовательность действий:
/etc/init.d/mysql stop
myisamchk -r -v -f /var/lib/mysql/need-database/crashed-table
/etc/init.d/mysql start
Полный список возможностей утилиты myisamchk можно просмотреть во встроенной документации:
myisamchk --help