При выполнении 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 следует по
крайней мере выполнить резервное
копирование.
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.
