|
Если что-то с базой данных... Время от времени базы данных дают сбой. Часто это событие застает администратора сервера врасплох в виду неочевидных симптомов неисправности. При этом может оказаться крайне опасным использовать те или иные способы исправления. В этой статье рассмотрены способы восстановления работоспособности баз данных.
Симптомами могут служить:
- нулевая выдача данных. Без сообщений об ошибках возвращается 0 рядов;
- расхождение информации о данных в различных структурах. Так, может оказаться, что число рядов возвращается верным, однако при выборке не возвращается никаких данных;
- операция CHECK TABLE `table` выдает сообщение об ошибке;
- при выборке данных получаем ошибку: "Got error 127 from table handler".
Ошибки в работе базы данных часто связаны с проблемами физического носителя, реже - это программные ошибки. При внезапном отключении питания оказываются частично записанными данные или не сброшены буферы данных, что приводит к искажению структур базы. Возникают ошибки и при переполнении диска, на котором хранится база, а также при достижении лимита пространства на носителе. Так или иначе, список действия по исправлению ошибок будет примерно одинаков.
1. Полный дамп базы, ее уничтожение и последующая загрузка.
Это самый радикальный способ и самый простой. В случае сбоя имеет смысл сделать полный дамп в любом случае, если это представляется возможным, - таким образом, спасая данные. Вот команда оболочки для отправки полного дампа базы в почтовый ящик:
mysqldump -u root -ppassword --skip-lock-tables database | mail -s"Database dump on `date`" admin@admin.ru
Далее необходимо либо уничтожить всю базу данных:
DROP DATABASE `database`
либо все таблицы в ней:
DROP TABLE `table1`; DROP TABLE `table2`; ...
Импортировать базу можно при помощи клиентской программы MySQL - mysql. Для этого нужно закачать дамп на сервер и зайти в эту программу. Импорт осуществляется командой:
. /root/dump.sql
2. Ремонт командами MySQL.
Несмотря на очевидность использования команды CHECK TABLE `table`, не рекомендуется ее использовать, потому что это грозит разрушением таблицы, если есть несостыковка структур данных. Зная, что таблицы неисправна (признаки приведены выше), можно воспользоваться командой непосредственно восстановления:
REPAIR TABLE `table`

В ответ база данных вернет список операций над таблицей, и в последнем поле Msg_text должно содержаться "OK", иначе таблицу нельзя считать исправленной. В этом случае надо проверить физический носитель и, если он в порядке, попробовать первый вариант исправления.
3. Ремонт при помощи утилит.
Файлы базы данных обычно располагаются в папке /var/lib/mysql/, хотя этот путь может быть любым (определяется в файле конфигурации /etc/my.cnf или в скрипте запуска в папке /etc/init.d/). Каждой таблице соответствует 3 файла:

Чтобы восстановить индексы таблицы по файлам ее данных, нужно ввести команду:
myisamchk -r <file.MYI>
|
|
|