4.4.7 Настройка режима профилактики таблиц
Начиная с версии MySQL 3.23.13 можно проверять таблицы типа MyISAM
с
помощью команды CHECK TABLE
(see section 4.4.4 Синтаксис CHECK TABLE
). Для ремонта
таблиц можно использовать команду REPAIR TABLE
(see section 4.4.5 Синтаксис REPAIR TABLE
).
Целесообразно выполнять регулярные проверки таблиц, не дожидаясь появления
проблем. В целях профилактики для проверки таблиц можно использовать
myisamchk -s
. Опция -s
(сокращение для --silent
) задает выполнение
myisamchk
в молчаливом режиме с выдачей сообщений только при возникновении
ошибок.
Не стоит сбрасывать со счетов и выполнение проверки таблиц при запуске
сервера. Например, всякий раз, когда во время обновления происходит
перезагрузка, необходима проверка всех таблиц, которые могли при этом
пострадать (назовем их "потенциально поврежденными таблицами"). В
safe_mysqld
можно добавить тест, запускающий myisamchk
для проверки всех
таблиц, измененных за последние 24 часа, в случае, если после перезагрузки
остался старый файл `.pid' (ID процесса) (mysqld
создает `.'pid
-файл во время
запуска и удаляет его при нормальном завершении; наличие `.pid'-файла во
время запуска системы свидетельствует о том, что mysqld не завершился
нормально).
Можно сделать даже более надежный тест - выполнить проверку таблиц с более
поздней, чем у `.pid'-файла, датой последней модификации.
Таблицы также следует регулярно проверять в ходе нормального
функционирования системы. У себя в MySQL AB
мы запускаем задачи по cron
для проверки всех наших важных таблиц раз в неделю, используя следующую
строку в файле crontab
:
35 0 * * 0 /path/to/myisamchk --fast --silent /path/to/datadir/*/*.MYI
Такая команда отображает информацию о поврежденных таблицах, и мы при
надобности можем их исследовать и исправить.
Поскольку за последние пару лет у нас (на самом деле) не было неожиданно
поврежденных таблиц (таблиц, получивших повреждение по причинам, отличным
от неисправностей оборудования), то для нас проверки один раз в неделю
более чем достаточно.
Мы рекомендуем для начала выполнять myisamchk -s
еженощно на всех
таблицах, обновленных на протяжении последних 24 часов, пока вы не станете
доверять MySQL настолько, насколько доверяем мы.
Обычно в таком контроле над таблицами MySQL необходимости нет. При
изменении таблиц с динамическим размером строк (таблиц со столбцами типов
VARCHAR
, BLOB
или TEXT
) или при наличии таблиц с большим числом удаленных
строк может потребоваться время от времени (где-то раз в месяц)
дефрагментировать таблицы.
Это можно сделать, используя OPTIMIZE TABLE
на аналогичных таблицах, или,
если есть возможность приостановить mysqld
, выполняя:
isamchk -r --silent --sort-index -O sort_buffer_size=16M */*.ISM
myisamchk -r --silent --sort-index -O sort_buffer_size=16M */*.MYI