При выполнении mysqld
со --skip-external-locking
(установка по умолчанию в
некоторых системах, подобных Linux) применение myisamchk
для проверки
таблицы, когда она используется mysqld
, не совсем безопасно. Если есть
уверенность, что никто не обратится к таблицам через mysqld
во время
выполнения myisamchk
, то достаточно до начала проверки таблиц выполнить
mysqladmin flush-tables
, если нет - то на время проверки таблиц необходимо
приостановить mysqld
. При запуске myisamchk
в то время, когда mysqld
обновляет таблицы, может быть выдано предупреждение о повреждении таблицы
- даже в случае, если этого не произошло.
Если --skip-external-locking
не используется, то проверять таблицы с помощью
myisamchk
можно в любое время. Во время проверки все пытающиеся обновить
таблицу клиенты получат возможность сделать это, только дождавшись
готовности myisamchk
.
Если myisamchk
применяется для ремонта или оптимизации таблиц, то всегда
необходимо обеспечить отсутствие обращений сервера mysqld
к таблице (это
также относится к случаю использования --skip-external-locking
). Если mysqld
не
может быть приостановлен, то до myisamchk
, как минимум, надо выполнить
mysqladmin flush-tables
. Таблицы могут быть повреждены, если сервер и
myisamchk
обратятся к таблицам одновременно.
В данном разделе описывается, как выявлять повреждения данных в базах данных MySQL и что делать с повреждениями дальше. Если таблица повреждается часто, то надо постараться отыскать причину этих повреждений! Обращайтесь к разделу See Раздел A.4.1, «Что делать, если работа MySQL сопровождается постоянными сбоями».
Причины повреждения таблиц рассматриваются также в разделе по таблицам
MyISAM
. Обращайтесь к разделу See Раздел 7.1.3, «Проблемы с таблицами MyISAM
.».
При выполнении послеаварийного восстановления важно понимать, что каждой
таблице tbl_name
в базе данных соответствуют три файла в каталоге базы
данных:
Файл | Назначение |
tbl_name.frm |
Файл определения таблицы (формы) |
tbl_name.MYD |
Файл данных |
tbl_name.MYI |
Индексный файл |
Каждый из этих трех типов файлов ``имеет'' свои виды повреждений, но наиболее часто проблемы возникают с файлами данных и индексными файлами.
Во время своей работы myisamchk
построчно создает копию файла (данных)
.MYD
. Стадия исправления завершается тем, что программа удаляет старый
файл .MYD
и переименовывает новый путем присвоения ему имени исходного.
Если используется --quick
, myisamchk
не создает временного файла .MYD
, а,
исходя из предположения, что файл .MYD
правилен, только формирует новый
индексный файл, никак не меняя файл .MYD
. Это безопасно, поскольку
myisamchk
автоматически распознает, что файл .MYD
запорчен, и в этом
случае прерывает исправление. Можно также задавать для myisamchk
две опции
--quick
. В этом случае myisamchk
не прерывается аварийно по некоторым
ошибкам (таким как дублирование ключа), а пытается исправить их путем
модификации файла .MYD
. Обычно использование двух опций --quick
имеет
смысл только в случае, если свободного места на диске недостаточно для
выполнения нормального исправления. Тогда перед запуском myisamchk
следует
по крайней мере выполнить резервное копирование.