7.1.3.2 Clients is using or hasn't closed the table properly
Клиенты неправильно используют таблицу или не закрыли ее надлежащим
образом
В заголовке каждого файла MyISAM `.MYI' имеется счетчик, который может
использоваться для проверки правильности закрытия таблицы.
Если при выполнении команд CHECK TABLE
или myisamchk
выдается следующая
ошибка:
# clients is using or hasn't closed the table properly
значит, нарушена синхронность счетчика. Это не означает, что таблица
повреждена, но необходимо произвести проверку и убедиться, что все в
порядке.
Счетчик работает следующим образом:
-
Во время первого обновления таблицы в MySQL значение счетчика в
заголовках индексных файлов увеличивается.
-
Во время следующих обновлений значение счетчика не изменяется.
-
После закрытия последней записи таблицы (после применения команды
FLUSH
или из-за отсутствия места в кэше таблицы) значение счетчика
уменьшается, если в таблицу были внесены изменения.
-
Если производится проверка таблицы, или проверка показывает, что все в
порядке, счетчик устанавливается в значение 0.
-
Чтобы избежать пересечения с другими процессами, которые могут
проверять таблицу, при закрытии значение счетчика не уменьшается, если
счетчик установлен в значение 0.
Иначе говоря, синхронность может быть нарушена следующим образом:
-
Таблицы
MyISAM
копируются без команд LOCK
и FLUSH TABLES
.
-
Между обновлением и последним закрытием произошел сбой MySQL (обратите
внимание: с таблицей все может быть в порядке, так как MySQL
документирует все изменения между выполнением каждого из операторов).
-
Кто-то применил команду
myisamchk --repair
или myisamchk
--update-state
к таблице, которая в данный момент использовалась
mysqld
.
Таблицу используют несколько серверов mysqld
, и один из них выполнил
команду REPAIR
или CHECK
по отношению к таблице, с которой работал другой
сервер. В этом случае можно выполнить команду CHECK
(даже если другие
серверы выдают предупреждения), но команды REPAIR
следует избегать, так
как она заменяет файл данных новым, информация о котором не передается
другим серверам.