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

Сказать спасибо