MySQL. Ошибка «Table * is marked as crashed and should be repaired»

В логах mysql сервера были обнаружены записи:

170216 16:03:18 [ERROR] /usr/sbin/mysqld: Table './mydb/j17_content' is marked as crashed and should be repaired
170216 16:03:18 [Warning] Checking table:   './mydb/j17_content'
170216 16:03:18 [ERROR] /usr/sbin/mysqld: Table './mydb/j17_redirect_links' is marked as crashed and should be repaired
170216 16:03:18 [Warning] Checking table:   './mydb/j17_redirect_links'
170216 16:03:18 [ERROR] /usr/sbin/mysqld: Table './mydb/j17_session' is marked as crashed and should be repaired
170216 16:03:18 [Warning] Checking table:   './mydb/j17_session'

аналогично этим ошибкам, могут быть:

126 = Index file is crashed / Wrong file format
127 = Record-file is crashed
132 = Old database file
134 = Record was already deleted (or record file crashed)
135 = No more room in record file
136 = No more room in index file
141 = Duplicate unique key or constraint on write or update
144 = Table is crashed and last repair failed
145 = Table was marked as crashed and should be repaired

Таблицы MyISAM, требуется восстановление.
Останавливаем mysql и делаем бекап каталогов необходимых баз из /var/lib/mysql, далее запускаем, если востановка по 2 способу.

1 способ с остановкой mysqld

Останавливаем сервис mysqld!

Переходим в каталог с файлами таблицы /var/lib/mysql/mydb/
Ищем ошибки:

# myisamchk -s *.MYI
MyISAM-table '/var/lib/mysql/mydb/table_name.MYI' is marked as crashed and should be repaired

Проверка таблиц:

myisamchk --update-state -e *.MYI

Если mysqld остановлен, то следует использовать опцию --update-state для указания myisamchk отмечать таблицы как ‘проверенные'(checked).

Восстанавливаем:

myisamchk -r -q j_content
myisamchk -r -q j_redirect_links
myisamchk -r -q j_session

-r -q означает «режим быстрого восстановления»
-r означает «режим восстановления»

2 способ без остановки mysqld

Если crashed всего несколько таблиц, то можно выполнить repair table из консольного mysql клиента или phpmyadmin при помощи sql запроса:

USE user_base;
REPAIR TABLE TableName;

Если в базе crashed много таблиц, то будет проще выполнить команду:

mysqlcheck -uUSER -pPASSWORD  --repair --extended user_base

ну а если много побитых таблиц, да еще и в большом количестве баз, то восстановление лучше запустить на все базы, командой:

mysqlcheck -uUSER -pPASSWORD  --repair --extended -A

Оптимизация и ремонт всех таблиц во всех базах данных
Следующая команда будет проверять все таблицы во всех базах данных, и если какая-то таблица повреждена он автоматически исправит это эту таблицу:

mysqlcheck --auto-repair -o --all-databases

http://www.mysql.ru/docs/man/myisamchk_syntax.html
http://www.mysql.ru/docs/man/Repair.html
http://www.mysql.ru/docs/man/Using_mysqlcheck.html
http://itblog.su/table-is-marked-as-crashed-and-should-be-repaired.html
https://andreyex.ru/blog-platforma-wordpress/luchshie-uchebniki-po-wordpress/optimizaciya-i-vosstanovlenie-baz-dannyx-mysql-s-pomoshhyu-mysqlcheck/