В процессе работы с базами данных может понадобиться восстанавливать поврежденные таблицы (не исключено, что даже потребуется восстановление всей базы данных) из резервных копий с использованием журналов обновлений, если таблица была случайно повреждена или удалена. В случае относительно незначительного повреждения, MySQL имеет резервные варианты механизма восстановления. В следующем разделе читатель узнает, что можно предпринять в таком случае.
Проверка таблиц на ошибки
Первое, что следует предпринять при каких-либо подозрениях на ошибки в таблицах, - это проверить таблицу на этот предмет. Один из способов проверки - использование утилиты myisamchk. Она вызывается командой myisamchk с указанием имени файла таблицы (или файлов):
myisamchk файл-таблицы
Так как для работы утилиты myisamchk требуется полный доступ к таблицам, перед ее использованием сервер лучше всего остановить. Это позволяет не прибегать к координации доступа клиентов к этой таблице. Кроме того, при проверке наличия ошибок в таблице, утилите можно задавать несколько параметров (см. табл. 15.1).
Проверка и восстановление таблиц
Проверка и восстановление таблиц
Ниже приведен пример запуска утилиты myisamchk с параметром extended. Ни в коем случае не экспериментируйте с этой командой на больших таблицах. Это приведет к длительной блокировке сервера процедурой проверки. Если никаких ошибок найдено не было, то можно быть уверенным, что с данной таблицей все в порядке.
Листинг 15.8.
[root@host]# /usr/local/mysql/bin/myisamchk -e dbl/accounts
Checking MyISAM file: db1/ accounts
Data records: 14 Deleted blocks: 0
- check file-size
- check key delete-chain
- check record delete-chain
- check index reference
- check records and index references
Но утилита myisamchk имеет и недостатки, и они заключаются в том, что во время проверки базы данных ни один пользователь не имеет возможности работать с ней. Более того, ни один пользователь не может блокировать таблицы, проверяемые утилитой myisamchk. При проверке больших таблиц это может вылиться в серьезную проблему.
Для решения этой проблемы можно попробовать использовать большой буфер (см. myisamchk -help для более детальной информации). Другим решением является проверка с помощью команды CHECK TABLE.
Утилита myisamchk требует исключительного доступа к проверяемым таблицам, по­скольку она работает напрямую с файлами таблицы. С другой стороны, команда CHECK TABLE проверяет таблицы на наличие в них ошибок. А это означает, что потребуется гораздо меньше усилий, поскольку нет необходимости в остановке работы сервера и снятии всех блокировок таблиц.
Вот как выглядит синтаксис этой команды: CHECK TABLE имя-таблицы, ...
А ниже представлен пример работы этой команды.
Проверка и восстановление таблиц
Совет
Эта команда позволяет задавать тип проверки. Для этого к команде CHECK TABLE достаточно добавить ключевые слова FAST, MEDIUM, CHANGED или EXTENDED.
Так почему бы постоянно не пользоваться командой CHECK TABLE для проверки? Потому что при этом сервер проверяет все! А если сервер отключен, этой командой воспользоваться нельзя. С другой стороны утилита, myisamchk работает на файловом уровне, даже тогда, когда сервер отключен. CHECK TABLE - это команда SQL, и она может быть послана только клиентом, а сервер должен находиться в рабочем состоянии, для того чтобы принять и обработать ее. Но все же, если перед вами стал выбор между этими двумя типами проверки, пусть лучше MySQL сделает эту работу за вас.
На заметку
Кроме того, утилита myisamchk не работает с таблицами типа InnoDB и BDB, а команда CHECK TABLE - работает.