Відновлюємо таблицю mysql, amiweb

Як то раз трапилася біда - робив оптимізацію таблиць БД і забув, що таблиця форумних повідомлень величезна і буде оброблятися вічність. Перерваний процес, природно, вбив її. Вірніше не вбив, але помилок наробив.

Що перше спадає на думку? Зробити відновлення в phpmyadmin. Запускаю, робить, сторінка браузера оновлюється, процес йде, сервер висить намертво, не працюють всі сайти на ньому. Зупиняю, тому що набридло. Нічого не оживає, доводиться перезапускати mysqld. Вирішую спробувати те ж саме вночі, залишивши процес на п'ять годин, може не вистачає часу ... Залишаю. Через п'ять годин так само ніякого результату. Тепер доводиться перезапускати весь сервер, тому що навіть підключитися по SSH не виходить. Сум…

Починаю думати, може проблема в phpmyadmin і варто спробувати через SSH доступу встановити таблицю. Сказано зроблено. запускаю

mysqlcheck -r db_name table_name -uroot -p

В результаті окрім напису «Connecting to mysql» - нічого. Зрозуміти, що відбувається абсолютно неможливо. Одне зрозуміло точно - сервер знову важить.

Намагаюся зробити dump бази на всякий випадок командою

mysqldump -uroot -p db_name> db_name.sql

Нічого не виходить, пише «Table is marked as crashed and last (automatic?) Repair failed when using LOCK TABLES»

Залишається спробувати останній очевидний варіант - myisamchk. Почитавши різні статті починає здаватися, що це застарілий метод і пробувати його не варто. Але вибору то немає. Потім бентежить, що рекомендують зупиняти сервер MySQL для виконання даної Коменди. Але вроди, з'ясовую, що це бажано, але не обов'язково.

Приступаємо до процесу

Переходимо в папку, де знаходяться файли бази даних. Як правило, це щось вроди цього

У цій папці знаходяться файли таблиць. Нам потрібно вибрати обробку пошкодженої і запустити процес так:

myisamchk -r crashed-table

а ще краще ось так, щоб бачити все, що робиться (в даному випадку включені опції --verbose і --force)

myisamchk -r -v -f crashed-table

Після виконання команди ми повинні отримати повністю справну таблицю. У мене вийшло. -)