Spec-Zone .ru
спецификации, руководства, описания, API
|
CHECK TABLEtbl_name
[,tbl_name
] ... [option
] ...option
= {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
CHECK TABLE
проверяет таблицу или таблицы для ошибок. CHECK TABLE
работы для InnoDB
, MyISAM
, ARCHIVE
, и CSV
таблицы. Для MyISAM
таблицы, ключевые
статистические данные обновляются также.
Чтобы проверить таблицу, у Вас должно быть некоторое полномочие для этого.
CHECK TABLE
может также проверить представления на проблемы, такие как таблицы, на
которые ссылаются в определении представления, которые больше не существуют.
CHECK TABLE
поддерживается для разделенных таблиц, и можно использовать ALTER TABLE ... CHECK PARTITION
проверять один или более разделов; для получения
дополнительной информации см. Раздел 13.1.6,"ALTER
TABLE
Синтаксис", и Раздел 17.3.4, "Обслуживание
Разделов".
В MySQL 5.7.1, gtid_next
должен быть установлен в AUTOMATIC
прежде,
чем сделать это заявление. Это ограничение не применяется в MySQL 5.7.2 или позже. (Ошибка #16062608, Ошибка
#16715809, Ошибка #69045)
CHECK TABLE
возвращает набор результатов со следующими столбцами.
Столбец | Значение |
---|---|
Table |
Имя таблицы |
Op |
Всегда check |
Msg_type |
status , error , info , note , илиwarning |
Msg_text |
Информационное сообщение |
Отметьте, что оператор мог бы произвести много строк информации для каждой проверенной таблицы. У последней
строки есть a Msg_type
значение status
и Msg_text
обычно должен быть OK
. Если Вы не
добираетесь OK
, или Table is already up to date
следует обычно выполнять восстановление таблицы. См. Раздел
7.6,"MyISAM
Табличное Обслуживание и Восстановление Катастрофического
отказа". Table is already up to date
средства, что механизм хранения
для таблицы, обозначенной, что не было никакой потребности проверить таблицу.
FOR UPGRADE
опция проверяет, являются ли именованные таблицы совместимыми с текущей
версией MySQL. С FOR UPGRADE
, сервер проверяет каждую таблицу, чтобы определить,
были ли какие-либо несовместимые изменения в каком-либо из типов данных таблицы, или индексирует, так как
таблица была составлена. В противном случае проверка успешно выполняется. Иначе, если есть возможная
несовместимость, сервер осуществляет полную проверку таблицы (который мог бы занять время). Если полная проверка
успешно выполняется, сервер отмечает таблицу .frm
файл с текущим номером версии
MySQL. Отмечание .frm
файл гарантирует, что дальнейшие проверки на таблицу с той
же самой версией сервера будут быстры.
Несовместимости могли бы произойти, потому что формат хранения для типа данных изменился или потому что его порядок сортировки изменился. Наша цель состоит в том, чтобы избежать этих изменений, но иногда они необходимы, чтобы исправить проблемы, которые были бы хуже чем несовместимость между выпусками.
В настоящий момент, FOR UPGRADE
обнаруживает эти несовместимости:
Порядок индексации на пространство конца в TEXT
столбцы для InnoDB
и MyISAM
таблицы изменились между MySQL 4.1 и 5.0.
Метод хранения нового DECIMAL
тип данных изменился между MySQL 5.0.3 и 5.0.5.
Если Ваша таблица была составлена различной версией сервера MySQL чем тот, Вы
являетесь в настоящий момент рабочими, FOR UPGRADE
указывает, что таблица
имеет .frm
файл с несовместимой версией. В этом случае, набор результатов,
возвращенный CHECK TABLE
содержит строку с a Msg_type
значение error
и
a Msg_text
значение Table upgrade required. Please do
"REPAIR TABLE `
tbl_name
`" to fix it!
Изменения иногда производятся в наборах символов или сопоставлениях, которые
требуют, чтобы таблица индексировала, чтобы быть восстановленной. Для получения дополнительной
информации об этих изменениях и когда FOR UPGRADE
обнаруживает их, см. Раздел 2.11.3, "Проверяя
Или Таблицы, или Индексирует, Должен быть Восстановлен".
YEAR(2)
осуждается с MySQL 5.6.6. CHECK TABLE
рекомендует REPAIR TABLE
для таблиц, содержащих этот тип данных. REPAIR TABLE
преобразовывает YEAR(2)
к YEAR(4)
.
Другие варианты проверки, которые могут быть даны, показываются в следующей таблице. Эти опции передают к механизму хранения, который может использовать их или нет.
Ввести | Значение |
---|---|
QUICK |
Не сканируйте строки, чтобы проверить на неправильные ссылки. Применяется к InnoDB
и MyISAM таблицы и представления.
|
FAST |
Проверка только таблицы, которые не были закрыты должным образом. Применяется только к MyISAM таблицы и представления; проигнорированный для InnoDB .
|
CHANGED |
Проверка только таблицы, которые были изменены начиная с последней проверки или которые не были
закрыты должным образом. Применяется только к MyISAM таблицы и
представления; проигнорированный для InnoDB .
|
MEDIUM |
Строки сканирования, чтобы проверить, который удалил ссылки, допустимы. Это также вычисляет ключевую
контрольную сумму для строк и проверяет это с расчетной контрольной суммой для ключей. Применяется
только к MyISAM таблицы и представления; проигнорированный для InnoDB .
|
EXTENDED |
Сделайте полный ключевой поиск для всех ключей для каждой строки. Это гарантирует, что таблица
является на 100 % непротиворечивой, но занимает много времени. Применяется только к MyISAM таблицы и представления; проигнорированный для InnoDB .
|
Если ни одна из опций QUICK
, MEDIUM
, или EXTENDED
определяются, тип проверки значения по умолчанию для динамического формата
MyISAM
таблицы MEDIUM
. У этого есть тот же самый
результат как работающий myisamchk - средняя проверка tbl_name
на таблице. Тип проверки значения по умолчанию также MEDIUM
для статического
формата MyISAM
таблицы, если CHANGED
или FAST
определяется. В этом случае значение по умолчанию QUICK
.
Сканирование строки пропускается для CHANGED
и FAST
потому что строки очень редко повреждаются.
Можно объединить опции проверки, как в следующем примере, который делает быструю проверку на таблице, чтобы определить, было ли это закрыто должным образом:
CHECK TABLE test_table FAST QUICK;
В некоторых случаях, CHECK
TABLE
изменяет таблицу. Это происходит, если таблица отмечается как "повреждено" или "не закрытый должным образом",
но CHECK TABLE
не находит проблем в таблице. В этом случае, CHECK TABLE
отмечает таблицу как хорошо.
Если таблица повреждается, наиболее вероятно, что проблема находится в индексировании а не в части данных. Все предыдущие типы проверки проверяют индексирование полностью и должны таким образом найти большинство ошибок.
Если Вы только хотите проверить таблицу, которую Вы принимаете, хорошо, недопустимо использовать опции проверки
или QUICK
опция. Последний должен использоваться, когда спешите и можно взять на
себя очень маленький риск это QUICK
не находит ошибку в файле данных. (В
большинстве случаев, при нормальном использовании, MySQL должен найти любую ошибку в файле данных. Если это
происходит, таблица отмечается как "повреждено"
и не может использоваться, пока она не восстанавливается.)
FAST
и CHANGED
главным образом предназначаются, чтобы
использоваться из сценария (например, чтобы быть выполненным от cron), если Вы хотите проверить таблицы время от времени. В
большинстве случаев, FAST
должен быть предпочтен CHANGED
. (Единственный случай, когда это не предпочитается, - то, когда Вы
подозреваете, что нашли ошибку в MyISAM
код.)
EXTENDED
должен использоваться только после того, как Вы осуществили нормальную
проверку, но все еще получаете странные ошибки от таблицы, когда MySQL пытается обновить строку или найти строку
ключом. Это очень маловероятно, если нормальная проверка успешно выполнилась.
Использование CHECK TABLE ... EXTENDED
мог бы влиять на план выполнения, сгенерированный
оптимизатором запросов.
Некоторые проблемы, сообщенные CHECK TABLE
не может быть исправлен автоматически:
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.
Следующие примечания применяются к InnoDB
таблицы:
Если CHECK
TABLE
находит проблему для InnoDB
таблица, сервер завершает
работу, чтобы предотвратить передачу ошибок. Детали ошибки будут записаны журналу ошибок.
Если CHECK
TABLE
встречается с повреждениями или ошибками в InnoDB
таблицы
или индексируют, это сообщает об ошибке. Это не завершает работу сервера. Запуск с MySQL 5.5, CHECK TABLE
обычно отмечает индексирование и иногда отмечает таблицу
как повреждено, предотвращая дальнейшее использование индексирования или таблицы.
Если CHECK
TABLE
находит, что неправильное число записей во вторичном устройстве индексирует, оно
сообщит об ошибке, но не будет завершать работу сервера или предотвращать доступ к файлу.
CHECK TABLE
рассматривает структуру индексной страницы, затем рассматривает каждую ключевую запись. Это не проверяет
ключевого указателя на кластеризируемую запись или следует за путем для BLOB
указатели.
Когда InnoDB
таблица сохранена в ее собственном.ibd файле в режиме файла на таблицу,
первые 3 страницы .ibd
содержите информацию о заголовке, а не таблицу или индексируйте данные. CHECK
TABLE
оператор не обнаруживает несогласованности, которые только влияют на данные заголовка.
Проверять все содержание InnoDB
.ibd
файл,
используйте innochecksum
команду.
Работая CHECK TABLE
на большом InnoDB
таблицы, другие потоки могут быть блокированы во время CHECK TABLE
выполнение. Чтобы избежать тайм-аутов, семафор ожидает, порог (600 секунд) расширяется на 2 часа (7200
секунд) для CHECK TABLE
операции. Если InnoDB
обнаруживает семафор, ожидает 240 секунд, или больше он начинает печатать InnoDB
контролируйте вывод к журналу ошибок. Если запрос блокировки
расширяется вне семафора, ожидают порог, InnoDB
прервет процесс. Чтобы
избежать возможности семафора ожидают тайм-аут полностью, можно работать CHECK
TABLE QUICK
вместо CHECK TABLE
.