Spec-Zone.ru › MySQL 8.4

15.7.3.5 Операция REPAIR TABLE

REPAIR [NO_WRITE_TO_BINLOG | LOCAL]
    TABLE tbl_name [, tbl_name] ...
    [QUICK] [EXTENDED] [USE_FRM]

REPAIR TABLE восстанавливает, возможно, повреждённую таблицу, только для некоторых типов хранилищ.

Для этой операции требуются права SELECT и INSERT для таблицы.

Хотя обычно вам не нужно выполнять REPAIR TABLE, в случае катастрофы эта операция, очень вероятно, восстановит все данные из повреждённой MyISAM таблицы. Если ваши таблицы часто повреждаются, попытайтесь найти причину, чтобы избежать использования REPAIR TABLE. См. Раздел B.3.3.3, «Что делать, если MySQL постоянно зависает» и Раздел 18.2.4, «Проблемы с таблицами MyISAM».

REPAIR TABLE проверяет таблицу на необходимость обновления. Если требуется, она выполняет обновление, следуя тем же правилам, что и операция CHECK TABLE ... FOR UPGRADE. Дополнительную информацию см. в разделе 15.7.3.2, «Операция CHECK TABLE».

Важно
  • Перед выполнением операции восстановления таблицы сделайте резервную копию таблицы; в некоторых случаях операция может привести к потере данных. Возможные причины включают, но не ограничиваются ими, ошибки файловой системы. См. Главу 9, «Резервное копирование и восстановление».

  • Если сервер завершает работу во время операции REPAIR TABLE, обязательно после перезапуска сразу выполните операцию REPAIR TABLE для таблицы перед выполнением любых других операций с ней. В худшем случае у вас может быть новый чистый индексный файл без информации о файле данных, и затем следующая выполняемая операция может перезаписать файл данных. Это маловероятный, но возможный сценарий, который подчеркивает важность создания резервной копии в первую очередь.

  • В случае повреждения таблицы на источнике и выполнения операции REPAIR TABLE над ней, любые изменения в исходной таблице не распространяются на реплики.

  • Поддержка операций REPAIR TABLE для типов хранилищ и разбиения

  • Параметры операции REPAIR TABLE

  • Вывод операции REPAIR TABLE

  • Учёт особенностей восстановления таблиц

Поддержка операций REPAIR TABLE для типов хранилищ и разбиения

REPAIR TABLE работает для таблиц MyISAM, ARCHIVE и CSV. Для таблиц MyISAM по умолчанию она эквивалентна myisamchk --recover tbl_name. Данная операция не работает с представлениями.

REPAIR TABLE поддерживается для разнесённых таблиц. Однако параметр USE_FRM нельзя использовать с данной операцией для разнесённых таблиц.

Вы можете использовать ALTER TABLE ... REPAIR PARTITION для восстановления одной или нескольких партиций; для получения дополнительной информации см. Раздел 15.1.9, «Операция ALTER TABLE» и Раздел 26.3.4, «Обслуживание партиций».

Параметры операции REPAIR TABLE
  • NO_WRITE_TO_BINLOG или LOCAL

    По умолчанию сервер записывает операцию REPAIR TABLE в двоичный журнал, чтобы она была реплицирована на реплики. Чтобы отключить логирование, укажите необязательное ключевое слово NO_WRITE_TO_BINLOG или его псевдоним LOCAL.

  • QUICK

    Если используется параметр QUICK, REPAIR TABLE пытается восстановить только индексный файл, а не файл данных. Этот тип восстановления похож на тот, который выполняет myisamchk --recover --quick.

  • EXTENDED

    Если используется параметр EXTENDED, MySQL создаёт строку индекса по строке, вместо создания одного индекса за раз с сортировкой. Этот тип восстановления похож на тот, который выполняет myisamchk --safe-recover.

  • USE_FRM

    Параметр USE_FRM доступен для использования, если индексный файл .MYI отсутствует или его заголовок повреждён. Этот параметр сообщает MySQL не доверять информации в заголовке файла .MYI и пересоздать его, используя информацию из словаря данных. Такого рода восстановление нельзя выполнить с помощью myisamchk.

    Внимание

    Используйте параметр USE_FRM только в том случае, если вы не можете использовать стандартные режимы REPAIR. Инструктирование сервера игнорировать файл .MYI делает важную метаданные таблицы, хранящиеся в файле .MYI, недоступными для процесса восстановления, что может иметь негативные последствия:

    • Текущее значение AUTO_INCREMENT теряется.

    • Связь с удалёнными записями в таблице теряется, что означает, что свободное место для удалённых записей остаётся незанятым.

    • Заголовок файла .MYI указывает, сжата ли таблица. Если сервер игнорирует эту информацию, он не может определить, что таблица сжата, и восстановление может привести к изменению или потере содержимого таблицы. Это означает, что USE_FRM не следует использовать для сжатых таблиц. В любом случае это не должно быть необходимо: сжатые таблицы доступны только для чтения, поэтому они не должны повреждаться.

    Если вы используете USE_FRM для таблицы, созданной другой версией MySQL, чем та, которую вы сейчас используете, REPAIR TABLE не пытается восстановить таблицу. В этом случае результат, возвращаемый REPAIR TABLE, содержит строку со значением Msg_type, равным error, и значением Msg_text, равным Failed repairing incompatible .FRM file.

    При использовании параметра USE_FRM, REPAIR TABLE не проверяет таблицу на необходимость обновления.

Вывод таблицы РЕМОНТ

REPAIR TABLE возвращает набор результатов со столбцами, показанными в следующей таблице.

Столбец Значение
Table Имя таблицы
Op Всегда repair
Msg_type status, error, info, note или warning
Msg_text Информационное сообщение

Оператор REPAIR TABLE может генерировать много строк информации для каждой ремонтируемой таблицы. Последняя строка имеет значение Msg_type, равное status, и Msg_test обычно должно быть OK. Для таблицы MyISAM, если вы не получаете OK, вы должны попробовать восстановить ее с помощью myisamchk --safe-recover. (REPAIR TABLE не реализует все опции myisamchk. С помощью myisamchk --safe-recover вы также можете использовать опции, которые REPAIR TABLE не поддерживает, такие как --max-record-length.)

REPAIR TABLE таблица обрабатывает и генерирует ошибки, возникающие при копировании статистики таблицы из старого поврежденного файла в новый созданный файл. Например, если идентификатор пользователя владельца файла .MYD или .MYI отличается от идентификатора пользователя процесса mysqld, REPAIR TABLE генерирует ошибку "нельзя изменить владение файлом", если mysqld не запущен пользователем root.

Учетные параметры ремонта таблиц

Вы можете увеличить производительность REPAIR TABLE, установив определенные системные переменные. См. Раздел 10.6.3, «Оптимизация операторов REPAIR TABLE».

REPAIR TABLE обновляет таблицу, если она содержит старые временные столбцы в формате до 5.6.4; а именно, столбцы TIME, DATETIME и TIMESTAMP, которые не поддерживали точность дробных секунд.

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

Spec-Zone.ru

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