myisamchk — утилита, позволяющая выявлять поврежденные myisam таблицы и исправлять их. В логах сервера баз данных часто можно обнаружить сведения о поврежденных таблицах, происходить поломка может, например, при закончившемся дисковом пространстве или при OOM.
Таблица MyISAM представляет собой три файла:
- *.frm — формат таблицы
- *.MYD (MyData) — данные
- *.MYI (MyIndex) — индекс
Починка требуется фалам с расширением .MYI, именно их имена передаются утилите.
Использование myisamchk для починки таблиц
О поломанных таблицах говорят записи в логах (искать их нужно в /var/log/mysql/mysql-error.log или в другом файле если значение было переопределено в конфигурации сервера баз данных):
1709021 15:52:09 [ERROR] mysqld: Table './example/torg12_brands' is marked as crashed and should be repaired
Проверить таблицы на целостность можно так:
myisamchk /var/lib/mysql/example /*.MYI
Также можно перенаправить вывод в лог добавив к команде > /tmp/damageddb.log
Есть возможность вывести на экран все данные о таблице, для этого нужно использовать ключ -dvv и тем же образом указать путь к таблице.
Но чаще всего требуется именно починка, для того чтобы ее запустить потребуется ключ -r (recover) и имя таблицы — или же указание всех таблиц определенной БД по маске (как в примере ниже)
myisamchk -r /var/lib/mysql/example/*.MYI
Вместо -r можно использовать определенную комбинацию ключей
myisamchk -f -ss /var/lib/mysql/example/*.MYI
-ss — silent, утилита не будет выводить предупреждения, только ошибки
-f — force, будет исправлять все таблицы которые окажутся поврежденными, ключ нужно использовать каждый раз когда ошибкой заканчивается выполнение myisamchk -r
Если на сервере используются таблицы InnoDB использование утилиты результата не даст, InnoDB несколько сложнее восстанавливать и делается это иначе