18.2.4.2 Проблемы при некорректном закрытии таблиц
Каждый файл индекса MyISAM (файл .MYI) имеет счётчик в заголовке, который можно использовать для проверки правильности закрытия таблицы. Если вы получаете следующее предупреждение от CHECK TABLE или myisamchk, это означает, что этот счётчик вышел из синхронизации:
clients are using or haven't closed the table properly
Это предупреждение не обязательно означает, что таблица повреждена, но вы должны проверить таблицу.
Счётчик работает следующим образом:
В первый раз, когда таблица обновляется в MySQL, счётчик в заголовке файлов индекса увеличивается.
Счётчик не изменяется при последующих обновлениях.
Когда последний экземпляр таблицы закрывается (потому что была выполнена операция
FLUSH TABLESили потому, что в кэше таблиц нет места), счётчик уменьшается, если таблица была обновлена в какой-либо момент.При восстановлении или проверке таблицы, если она окажется в порядке, счётчик сбрасывается в ноль.
Чтобы избежать проблем с взаимодействием с другими процессами, которые могут проверять таблицу, счётчик не уменьшается при закрытии, если он был равен нулю.
Другими словами, счётчик может стать неверным только при следующих условиях:
Таблица
MyISAMкопируется без предварительного выполненияLOCK TABLESиFLUSH TABLES.MySQL аварийно завершил работу между обновлением и окончательным закрытием. (Таблица может остаться в порядке, так как MySQL всегда выполняет запись для всего между каждой инструкцией.)
Таблица была изменена с помощью myisamchk --recover или myisamchk --update-state в то же время, когда она использовалась сервером mysqld.
-
Несколько серверов mysqld используют таблицу, и один сервер выполнил
REPAIR TABLEилиCHECK TABLEнад таблицей, в то время как другая сервер использовал её. В этой ситуации безопасно использоватьCHECK TABLE, хотя другие серверы могут получить предупреждение. Однако следует избегатьREPAIR TABLE, так как при замене одного сервером файла данных новым файлом об этом не известно другим серверам.В общем, не рекомендуется использовать один каталог данных для нескольких серверов. Подробное описание см. в разделе 7.8, «Запуск нескольких экземпляров MySQL на одном компьютере».
© 2025 Oracle
Licensed under the GPLv2 License.