В логах 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/