Myisamchk - ремонт таблиць і відновлення даних бд mysql, direqtor

Бази даних MySQL буває падають. З ким не буває? Двигуни сайтів при цьому лаються страшними словами в червоних рамках про зниклі таблиці. Але не все так страшно. Бази даних на те і створені, щоб все нажите непосильною працею не зливалося в Велике Ніщо від банальної помилки запису файлу або відключення живлення. Найкращим способом для їх ремонту та відновлення даних є, ІМХО, утиліта командного рядка - myisamchk. Вона входить в будь-яку штатну установку MySQL і працює з таблицями типу MyISAM. Робота з файлами бази відбувається безпосередньо, тому ремонт можливий тільки при зупиненому сервері БД MySQL.

Пам'ятка по швидкому ремонту таблиць MyISAM для себе і для тих кого занесе на цю сторінку з пошуку.

Заходимо на сервер через термінал. Переходимо в папку, де MySQL зберігає свій файли. Подивитися це можна в файлі конфігурації MySQL my.cnf. Досить часто це / var / lib / mysql.


Зупиняємо сервер БД, інакше навіть при перевірці ми отримаємо повідомлення про всі поточні блокування таблиць

service mysql stop

Перевірка таблиць даних

Перевірка всіх баз даних

myisamchk -css * / *. MYI


Перевірка однієї бази даних

myisamchk -css імя_бази / *. MYI


Опцію -c можна опускати, вона стоїть за умовчанням. Подвійна опція s змушує myisamchk бути дуже тихою, грубо кажучи, весь свій багатослівний висновок про справні таблицях вона зливає в / dev / null і виводить на екран тільки виявлені помилки і попередження.

Відновлення даних
Отже, биті таблиці знайдені, приступаємо до ремонту. Спершу робимо резервну копію тих баз даних, де виявлені проблеми.

tar -czvf імя_бази.tgz імя_бази


Потім додатково перевіряємо окремі таблиці, імена яких отримали на попередньому етапі

myisamchk -з імя_бази / імя_табліци.MYI


Можливо, ви отримаєте якусь корисну інформацію, але зазвичай myisamchk просто рекомендує лагодити. Лагодити, так чинити.

myisamchk -r імя_бази / імя_табліци.MYI


Досить часто утиліта не може цього зробити, тоді пробуємо інший режим:

myisamchk -o імя_бази / імя_табліци.MYI


Якщо все OK, то запускаємо сервер і ваші сайти запрацюють знову

service mysql start


Не забуваємо видалити файл бекапа, якщо він не потрібен

А є і дуже лінива версія всього вищеописаного процесу, обробить всі MyISAM таблиці у всіх БД, доступних вказаною користувачеві і працює без зупинки сервера MySQL:

mysqlcheck -u root -p --auto-repair --check --optimize --all-databases


Або в конкретної БД:

mysqlcheck -u root -p --auto-repair --check --optimize імя_бази_данних


Без оптимізації, тільки перевірку і ремонт можна зробити і для таблиць типу InnoDB:

mysqlcheck -u root -p --auto-repair --check --all-databases