Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/myisam-table-close.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API