BACKUP TABLE
RESTORE TABLE
CHECK TABLE
REPAIR TABLE
myisamchk
для профилактики таблиц и послеаварийногоBuy this Reference Manual in softcover from Barnes & Noble!
CHECK TABLE
CHECK TABLE tbl_name[,tbl_name...] [option [option...]] option = QUICK | FAST | MEDIUM | EXTENDED | CHANGED
CHECK TABLE
работает только на таблицах MyISAM
и InnoDB
. На таблицах типа MyISAM
команда эквивалентна запуску на таблице myisamchk -m table_name
.
Если опция не указана, используется MEDIUM
.
Проверяет таблицу(ы) на наличие ошибок. Для таблиц MyISAM
обновляется статистика ключей. Команда возвращает таблицу со следующими столбцами:
Столбец | Значение |
Table | Имя таблицы. |
Op | Всегда ``check''. |
Msg_type | Одно из значений status , error , info , или warning . |
Msg_text | Само сообщение. |
Заметим, что по каждой проверяемой таблице может быть выдано много строк информации. Последняя строка будет представлять Msg_type status
и, как правило, должна содержать OK
. Если выдается что-либо отличное от OK
и Not checked
, то обычно следует провести ремонт таблицы (see section 4.4.6 Использование myisamchk
для профилактики таблиц и послеаварийного). Not checked
свидетельствует о том, что указанный для таблицы тип (TYPE
) не нуждается в проверке.
Различные типы проверки означают следующее:
Тип | Действия |
QUICK |
Не сканировать строки для проверки на неправильные связи. |
FAST |
Проверять только таблицы, которые не были корректно закрыты. |
CHANGED |
Проверять только таблицы, которые изменились со времени последней проверки или не были закрыты корректно. |
MEDIUM |
Сканировать строки для проверки того, что уничтоженные связи в порядке. При этом также подсчитывается ключевая контрольная сумма для строки и сравнивается с подсчитанной контрольной суммой для ключей. |
EXTENDED |
Выполнить полный просмотр ключа для всех ключей для каждой строки. Успех такой проверки гарантирует 100%-ное отсутствие противоречий в таблице, но на проверку уйдет немало времени! |
Для таблиц MyISAM
с динамическими размерами при запуске проверки всегда выполняется проверка MEDIUM
. Для строк со статическими размерами мы пропускаем сканирование строк для QUICK
и FAST
, поскольку повреждение строк происходит крайне редко.
Проверочные опции можно сочетать:
CHECK TABLE test_table FAST QUICK;
Эта команда просто вызовет быструю проверку таблицы для выявления того, была ли она закрыта корректно.
Примечание: в некоторых случаях CHECK TABLE
изменяет таблицу! Это происходит, если таблица помечена как 'поврежденная/corrupted' или 'не закрытая корректно/not closed properly', а CHECK TABLE
не находит никаких проблем в таблице. В этом случае CHECK TABLE
отметит в таблице, что с ней все нормально.
Если таблица повреждена, то, скорее всего, проблема в индексах, а не в данных. Проверки всех типов обеспечивают всестороннюю проверку индексов и тем самым должны обнаруживать большинство ошибок.
Если проверяется таблица, с которой предположительно все нормально, то можно опустить проверочные опции или указать опцию QUICK
. Последнюю возможность следует использовать в случае ограничений по времени и тогда, когда можно пойти на риск (очень незначительный), что QUICK
пропустит ошибку в файле данных. (В большинстве случаев MySQL должен найти - при нормальной работе - любые ошибки в файле с данными. Если ошибки найдены, то таблица будет отмечена как 'поврежденная/corrupted', и в таком случае ее нельзя будет использовать, пока она не будет исправлена.)
FAST
и CHANGED
главным образом предназначены для использования в сценариях (например, для запуска из cron
), если необходимо время от времени проверять таблицы. В большинстве случаев следует отдавать предпочтение FAST
перед CHANGED
(иначе надо поступать только в случае, когда возникает подозрение, что найдена ошибка в самом коде MyISAM
).
Прибегать к EXTENDED
следует только тогда, когда после выполнения нормальной проверки для таблицы по-прежнему выдаются странные ошибки при попытке MySQL обновить строку или найти строку по ключу (что очень маловероятно в случае успеха нормальной проверки!).
Некоторые проблемы, о которых сообщается при проверке таблицы, нельзя исправить автоматически:
Found row where the auto_increment column has the value 0
. Это означает, что в таблице есть строка, где индексированный столбец AUTO_INCREMENT
содержит значение 0 (строку, в которой столбец AUTO_INCREMENT
имеет значение 0, можно создать, явно установив столбец в 0 командой UPDATE
). Это само по себе не является ошибкой, но может вызвать неприятности, если понадобится сделать дамп таблицы или восстановить ее или выполнить над ней ALTER
TABLE. В этом случае столбец с атрибутом AUTO_INCREMENT
изменит значение в соответствии с правилами для столбцов AUTO_INCREMENT
, что может вызвать проблемы, подобные ошибке дублирования ключа. Чтобы избавиться от предупреждения, просто выполните команду UPDATE
для установки в столбце значения, отличного от 0.Add your own comment.