Клиенты неправильно используют таблицу или не закрыли ее надлежащим образом
В заголовке каждого файла 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 --recover или
myisamchk --update-state к
таблице, которая в данный
момент использовалась
mysqld.
Таблицу используют несколько
серверов mysqld, и один из
них выполнил команду
REPAIR или CHECK по
отношению к таблице, с которой
работал другой сервер. В этом
случае можно выполнить команду
CHECK (даже если другие
серверы выдают предупреждения),
но команды REPAIR следует
избегать, так как она заменяет
файл данных новым, информация о
котором не передается другим
серверам.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
