myisamchk и поврежденные таблицы myisam

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 несколько сложнее восстанавливать и делается это иначе