7.6.1 Использование myisamchk для восстановления после сбоя
В этом разделе описывается, как проверять и обрабатывать повреждения данных в базах данных MySQL. Если ваши таблицы часто повреждаются, вам следует попытаться выяснить причину. См. Раздел B.3.3.3, «Что делать, если MySQL продолжает сбоить».
Для объяснения того, как MyISAM таблицы могут быть повреждены, см. Раздел 15.2.4, «Проблемы таблиц MyISAM».
Если вы запускаете mysqld с отключенным внешним блокированием (что является значением по умолчанию), вы не можете надежно использовать myisamchk для проверки таблицы, когда mysqld использует ту же таблицу. Если вы уверены, что никто не может получить доступ к таблицам через mysqld во время выполнения myisamchk, вам достаточно выполнить mysqladmin flush-tables перед началом проверки таблиц. Если вы не можете гарантировать этого, вы должны остановить mysqld во время проверки таблиц. Если вы запускаете myisamchk для проверки таблиц, которые mysqld обновляет одновременно, вы можете получить предупреждение о повреждении таблицы, даже если она не повреждена.
Если сервер запускается с включенным внешним блокированием, вы можете использовать myisamchk для проверки таблиц в любое время. В этом случае, если сервер пытается обновить таблицу, которую использует myisamchk, сервер ждет завершения myisamchk перед продолжением.
Если вы используете myisamchk для ремонта или оптимизации таблиц, вы обязательно должны убедиться, что сервер mysqld не использует таблицу (это также относится к случаю отключенного внешнего блокирования). Если вы не останавливаете mysqld, вам по крайней мере следует выполнить mysqladmin flush-tables перед запуском myisamchk. Ваши таблицы могут быть повреждены, если сервер и myisamchk обращаются к таблицам одновременно.
При выполнении восстановления после сбоя важно понимать, что каждая MyISAM таблица tbl_name в базе данных соответствует трем файлам в каталоге базы данных, показанным в следующей таблице.
| Файл | Назначение |
|---|---|
| Файл определения (формата) |
| Файл данных |
| Файл индексов |
Каждый из этих трех типов файлов может быть поврежден различными способами, но проблемы чаще всего возникают в файлах данных и индексов.
myisamchk работает, создавая копию .MYD файла данных строка за строкой. Этап ремонта завершается удалением старого .MYD файла и переименованием нового файла в исходное имя файла.
Если вы используете --quick, myisamchk не создает временный .MYD файл, а вместо этого предполагает, что .MYD файл корректен и генерирует только новый файл индексов, не затрагивая .MYD файл. Это безопасно, поскольку myisamchk автоматически определяет, является ли .MYD файл повреждённым, и прерывает ремонт, если это так. Вы также можете указать опцию --quick дважды для myisamchk. В этом случае, myisamchk не прерывается на некоторых ошибках (таких как ошибки дублирующихся ключей), а вместо этого пытается их разрешить, изменив .MYD файл. Обычно использование двух опций --quick полезно только если у вас слишком мало свободного места на диске для выполнения обычного ремонта. В этом случае вы должны хотя бы сделать резервную копию таблицы перед запуском myisamchk.
© 2025 Oracle
Licensed under the GPLv2 License.