При выполнении mysqld со --skip-locking (установка по умолчанию в некоторых системах, подобных Linux) применение myisamchk для проверки таблицы, когда она используется mysqld, не совсем безопасно. Если есть уверенность, что никто не обратится к таблицам через mysqld во время выполнения myisamchk, то достаточно до начала проверки таблиц выполнить mysqladmin flush-tables, если нет - то на время проверки таблиц необходимо приостановить mysqld. При запуске myisamchk в то время, когда mysqld обновляет таблицы, может быть выдано предупреждение о повреждении таблицы - даже в случае, если этого не произошло.
Если --skip-locking не используется, то проверять таблицы с помощью
Если 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 следует по крайней мере выполнить резервное копирование.
4.4.6.6 Использование памяти утилитой myisamchk | Оглавление | 4.4.6.8 Как проверять таблицы на ошибки |