поиск:
Полезные ссылки

  • Форум по MySQL

  • Статьи по MySQL

  • Вопросы по MySQL

  • MySQL.com


  • Базы данных

  • MySQL

  • PostgreSQL


  • PHP конференция 2005
    Подробности!

    4.4.6.7. Использование myisamchk для послеаварийного восстановления

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

     
    © 1997-2005 PHP Club Team
    Rambler's Top100