Spec-Zone.ru › MySQL 9.2

9.6.1 Использование myisamchk для восстановления после сбоя

В этом разделе описывается, как проверять и обрабатывать повреждения данных в базах данных MySQL. Если ваши таблицы часто повреждаются, постарайтесь выяснить причину. См. Раздел B.3.3.3, «Что делать, если MySQL постоянно сбоит».

Для объяснения того, как таблицы MyISAM могут быть повреждены, см. Раздел 18.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.MYD Файл данных
tbl_name.MYI Файл индексов

Каждый из этих трех типов файлов может быть поврежден различными способами, но проблемы чаще всего возникают в файлах данных и файлах индексов.

myisamchk работает путем создания копии файла данных .MYD строка за строкой. Он завершает этап восстановления, удаляя старый файл .MYD и переименовывая новый файл в исходное имя файла. Если вы используете --quick, myisamchk не создает временный файл .MYD, а вместо этого предполагает, что файл .MYD корректен, и генерирует только новый файл индексов, не затрагивая файл .MYD. Это безопасно, потому что myisamchk автоматически определяет, является ли файл .MYD поврежденным, и прерывает восстановление, если это так. Вы также можете указать опцию --quick дважды для myisamchk. В этом случае myisamchk не прерывает выполнение при некоторых ошибках (таких как ошибки дублирования ключей), а вместо этого пытается разрешить их, изменив файл .MYD. Обычно использование двух опций --quick полезно только в том случае, если у вас слишком мало свободного дискового пространства для выполнения обычного восстановления. В этом случае вы должны хотя бы сделать резервную копию таблицы перед запуском myisamchk.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/myisam-crash-recovery.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API