Вчера позвонил знакомый и описал невероятную историю. Он сидел и никому не мешал, наполнял свой сайт контентом. И вдруг, после отправки формы, сайт перестал отвечать. Через несколько минут доступ к сайту возобновился, но появилась ошибка «Execution of a query to the database failed – Table ‘modx_site_content’ is marked as crashed and should be repaired». Через phpMyAdmin доступ к этой таблице так же был невозможен.
Не долго думая, я выполнил одну простую SQL команду – REPAIR TABLE modx_site_content и через мгновение сайт вернулся в рабочее состояние.
Сегодня обнаружил повреждённую таблицу и в своих базах данных (т.к. пользуемся одним сервером) и повторил REPAIR TABLE для своей таблицы. Тут и возникла мысль о том, что наверняка есть ещё повреждённые таблицы, но искать и восстанавливать их вручную было бы плохой идеей. Поэтому отправился на поиски более интересного решения. Ответ не заставил себя долго ждать. Он заключался в использовании утилиты mysqlcheck. Зашёл на сервер через ssh и выполнил команду mysqlcheck -Ar –user=root –password=rootpass. Утилита mysqlcheck подключилась к MySQL серверу под root логином и спустя несколько минут все таблицы были восстановлены.
А теперь более подробнее о параметрах утилиты:
A – применить опции для всех баз данных
r – выполнить REPAIR TABLE
user=root – логин root пользователя MySQL
password=rootpass – пароль root пользователя MySQL
Можно использовать аргументы -Aor, в этом случае таблицы не только починятся, но и оптимизируются командой OPTIMIZE TABLE. Соответственно, -Ao выполнит только оптимизацию таблиц.
Запускать утилиту mysqlcheck рекомендуется под суперпользователем root, запуск под другими пользователями не гарантирует удачное выполнение.