4.4.6.7 Использование myisamchk для послеаварийного восстановления
При выполнении mysqld
со --skip-locking
(установка по умолчанию в
некоторых системах, подобных Linux) применение myisamchk
для проверки
таблицы, когда она используется mysqld
, не совсем безопасно. Если есть
уверенность, что никто не обратится к таблицам через mysqld
во время
выполнения myisamchk
, то достаточно до начала проверки таблиц выполнить
mysqladmin flush-tables
, если нет - то на время проверки таблиц необходимо
приостановить mysqld
. При запуске myisamchk
в то время, когда mysqld
обновляет таблицы, может быть выдано предупреждение о повреждении таблицы
- даже в случае, если этого не произошло.
Если --skip-locking
не используется, то проверять таблицы с помощью
myisamchk
можно в любое время. Во время проверки все пытающиеся обновить
таблицу клиенты получат возможность сделать это, только дождавшись
готовности myisamchk
.
Если myisamchk
применяется для ремонта или оптимизации таблиц, то всегда
необходимо обеспечить отсутствие обращений сервера mysqld
к таблице (это
также относится к случаю использования --skip-locking
). Если mysqld
не
может быть приостановлен, то до myisamchk
, как минимум, надо выполнить
mysqladmin flush-tables
. Таблицы могут быть повреждены, если сервер и
myisamchk
обратятся к таблицам одновременно.
В данном разделе описывается, как выявлять повреждения данных в базах
данных MySQL и что делать с повреждениями дальше. Если таблица
повреждается часто, то надо постараться отыскать причину этих повреждений!
Обращайтесь к разделу See section A.4.1 Что делать, если работа MySQL сопровождается постоянными сбоями.
Причины повреждения таблиц рассматриваются также в разделе по таблицам
MyISAM
. Обращайтесь к разделу See section 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
следует
по крайней мере выполнить резервное копирование.