15.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, так как когда один сервер заменяет файл данных новым, об этом не известно другим серверам.В общем, не рекомендуется использовать общую директорию данных для нескольких серверов. Дополнительная информация приведена в Разделе 5.7, «Запуск нескольких экземпляров MySQL на одном компьютере».
© 2025 Oracle
Licensed under the GPLv2 License.