Spec-Zone.ru › MySQL 5.7

4.6.1 innochecksum — Утилита проверки контрольных сумм файлов InnoDB (оффлайн)

innochecksum вычисляет контрольные суммы для InnoDB файлов. Эта утилита считывает файл InnoDB табличного пространства, вычисляет контрольную сумму для каждой страницы, сравнивает вычисленную контрольную сумму со сохранённой и сообщает о несовпадениях, которые свидетельствуют о повреждении страниц. Она была первоначально разработана для ускорения проверки целостности файлов табличного пространства после перебоев электропитания, но также может быть использована после копирования файлов. Поскольку несоответствия контрольных сумм заставляют InnoDB намеренно остановить работающий сервер, может быть предпочтительнее использовать эту утилиту, чем ждать, пока сервер в рабочем режиме столкнётся с повреждёнными страницами.

innochecksum нельзя использовать с файлами табличного пространства, которые уже открыты сервером. Для таких файлов следует использовать CHECK TABLE для проверки таблиц в табличном пространстве. Попытка запустить innochecksum на табличном пространстве, которое уже открыто сервером, приводит к ошибке Не удалось заблокировать файл.

Если обнаружены несоответствия контрольных сумм, восстановите табличное пространство из резервной копии или запустите сервер и попробуйте использовать mysqldump для создания резервной копии таблиц в табличном пространстве.

Вызов innochecksum выглядит так:

innochecksum [options] file_name

Параметры innochecksum

innochecksum поддерживает следующие параметры. Для параметров, которые ссылаются на номера страниц, номера начинаются с нуля.

  • --help, -?

    Формат командной строки --help
    Тип Boolean
    Значение по умолчанию false

    Отображает справку по командной строке. Пример использования:

    innochecksum --help
    
  • --info, -I

    Формат командной строки --info
    Тип Boolean
    Значение по умолчанию false

    Синоним для --help. Отображает справку по командной строке. Пример использования:

    innochecksum --info
    
  • --version, -V

    Формат командной строки --version
    Тип Boolean
    Значение по умолчанию false

    Отображает информацию о версии. Пример использования:

    innochecksum --version
    
  • --verbose, -v

    Формат командной строки --verbose
    Тип Boolean
    Значение по умолчанию false

    Режим вывода подробной информации; печатает индикатор хода выполнения в лог-файл каждые пять секунд. Для того чтобы индикатор хода выполнения печатался, необходимо указать лог-файл с помощью параметра --log option. Чтобы включить режим verbose, выполните следующую команду:

    innochecksum --verbose
    

    Чтобы выключить режим вывода подробной информации, выполните следующую команду:

    innochecksum --verbose=FALSE
    

    Параметры --verbose и --log могут быть указаны одновременно. Например:

    innochecksum --verbose --log=/var/lib/mysql/test/logtest.txt
    

    Чтобы найти информацию об индикаторе хода выполнения в лог-файле, можно выполнить следующий поиск:

    cat ./logtest.txt | grep -i "okay"
    

    Информация об индикаторе хода выполнения в лог-файле выглядит примерно так:

    page 1663 okay: 2.863% done
    page 8447 okay: 14.537% done
    page 13695 okay: 23.568% done
    page 18815 okay: 32.379% done
    page 23039 okay: 39.648% done
    page 28351 okay: 48.789% done
    page 33023 okay: 56.828% done
    page 37951 okay: 65.308% done
    page 44095 okay: 75.881% done
    page 49407 okay: 85.022% done
    page 54463 okay: 93.722% done
    ...
    
  • --count, -c

    Формат командной строки --count
    Тип Base name
    Значение по умолчанию true

    Вывести количество страниц в файле и завершить работу. Пример использования:

    innochecksum --count ../data/test/tab1.ibd
    
  • --start-page=num, -s num

    Формат командной строки --start-page=#
    Тип Numeric
    Значение по умолчанию 0

    Начать с этого номера страницы. Пример использования:

    innochecksum --start-page=600 ../data/test/tab1.ibd
    

    или:

    innochecksum -s 600 ../data/test/tab1.ibd
    
  • --end-page=num, -e num

    Формат командной строки --end-page=#
    Тип Numeric
    Значение по умолчанию 0
    Минимальное значение 0
    Максимальное значение 18446744073709551615

    Завершить на этом номере страницы. Пример использования:

    innochecksum --end-page=700 ../data/test/tab1.ibd
    

    или:

    innochecksum --p 700 ../data/test/tab1.ibd
    
  • --page=num, -p num

    Формат командной строки --page=#
    Тип Integer
    Значение по умолчанию 0

    Проверить только этот номер страницы. Пример использования:

    innochecksum --page=701 ../data/test/tab1.ibd
    
  • --strict-check, -C

    Формат командной строки --strict-check=algorithm
    Тип Enumeration
    Значение по умолчанию crc32
    Допустимые значения

    innodb

    crc32

    none

    Укажите строгий алгоритм контрольной суммы. Варианты включают innodb, crc32 и none.

    В этом примере указан алгоритм контрольной суммы innodb:

    innochecksum --strict-check=innodb ../data/test/tab1.ibd
    

    В этом примере указан алгоритм контрольной суммы crc32:

    innochecksum -C crc32 ../data/test/tab1.ibd
    

    Применяются следующие условия:

    • Если параметр --strict-check не указан, innochecksum выполняет проверку на соответствие innodb, crc32 и none.

    • Если указан параметр none, допускаются только контрольные суммы, созданные с помощью none.

    • Если указан параметр innodb, допускаются только контрольные суммы, созданные с помощью innodb.

    • Если указан параметр crc32, допускаются только контрольные суммы, созданные с помощью crc32.

  • --no-check, -n

    Формат командной строки --no-check
    Тип Boolean
    Значение по умолчанию false

    Игнорировать проверку контрольной суммы при перезаписи контрольной суммы. Этот параметр может использоваться только с параметром innochecksum --write. Если параметр --write не указан, innochecksum завершает работу.

    В этом примере контрольная сумма innodb перезаписывается, чтобы заменить неверную контрольную сумму:

    innochecksum --no-check --write innodb ../data/test/tab1.ibd
    
  • --allow-mismatches, -a

    Формат командной строки --allow-mismatches=#
    Тип Целое число
    Значение по умолчанию 0
    Минимальное значение 0
    Максимальное значение 18446744073709551615

    Максимальное количество несоответствий контрольных сумм, разрешённых до завершения работы утилиты innochecksum. Значение по умолчанию — 0. Если --allow-mismatches=N, где N>=0, разрешается N несоответствий, и утилита innochecksum завершает работу на N+1. При установке --allow-mismatches в 0, innochecksum завершает работу при первом несоответствии контрольной суммы.

    В этом примере существующая innodb контрольная сумма переписывается, чтобы установить --allow-mismatches в 1.

    innochecksum --allow-mismatches=1 --write innodb ../data/test/tab1.ibd
    

    При установке --allow-mismatches в 1, если есть несоответствие на странице 600 и ещё одно на странице 700 в файле с 1000 страницами, контрольная сумма обновляется для страниц 0-599 и 601-699. Поскольку --allow-mismatches установлено в 1, контрольная сумма допускает первое несоответствие и завершается на втором несоответствии, оставив страницу 600 и страницы 700-999 без изменений.

  • --write=name, -w num

    Формат командной строки --write=algorithm
    Тип Перечисление
    Значение по умолчанию crc32
    Допустимые значения

    innodb

    crc32

    none

    Перезаписать контрольную сумму. При перезаписи недействительной контрольной суммы опция --no-check должна использоваться вместе с опцией --write. Опция --no-check указывает утилите innochecksum пропустить проверку недействительной контрольной суммы. Вам не нужно указывать опцию --no-check, если текущая контрольная сумма действительна.

    При использовании опции --write должен быть указан алгоритм. Возможные значения для опции --write:

    • innodb: Контрольная сумма, вычисленная в программном обеспечении, используя исходный алгоритм из InnoDB.

    • crc32: Контрольная сумма, вычисленная с использованием алгоритма crc32, возможно, с помощью аппаратной поддержки.

    • none: Постоянное число.

    Опция --write переписывает целые страницы на диск. Если новая контрольная сумма идентична существующей, новая контрольная сумма не записывается на диск, чтобы минимизировать ввод/вывод.

    Утилита innochecksum получает эксклюзивную блокировку при использовании опции --write.

    В этом примере записывается crc32 контрольная сумма для tab1.ibd:

    innochecksum -w crc32 ../data/test/tab1.ibd
    

    В этом примере crc32 контрольная сумма переписывается для замены недействительной crc32 контрольной суммы:

    innochecksum --no-check --write crc32 ../data/test/tab1.ibd
    
  • --page-type-summary, -S

    Формат командной строки --page-type-summary
    Тип Булево
    Значение по умолчанию false

    Отобразить количество каждого типа страниц в файле таблицы. Пример использования:

    innochecksum --page-type-summary ../data/test/tab1.ibd
    

    Пример вывода для --page-type-summary:

    File::../data/test/tab1.ibd
    ================PAGE TYPE SUMMARY==============
    #PAGE_COUNT PAGE_TYPE
    ===============================================
           2        Index page
           0        Undo log page
           1        Inode page
           0        Insert buffer free list page
           2        Freshly allocated page
           1        Insert buffer bitmap
           0        System page
           0        Transaction system page
           1        File Space Header
           0        Extent descriptor page
           0        BLOB page
           0        Compressed BLOB page
           0        Other type of page
    ===============================================
    Additional information:
    Undo page type: 0 insert, 0 update, 0 other
    Undo page state: 0 active, 0 cached, 0 to_free, 0 to_purge, 0 prepared, 0 other
    
  • --page-type-dump, -D

    Формат командной строки --page-type-dump=name
    Тип Строка
    Значение по умолчанию [none]

    Вывести информацию о типе страницы для каждой страницы в файле таблицы в stderr или stdout. Пример использования:

    innochecksum --page-type-dump=/tmp/a.txt ../data/test/tab1.ibd
    
  • --log, -l

    Формат командной строки --log=path
    Тип Имя файла
    Значение по умолчанию [none]

    Лог-вывод для инструмента innochecksum. Требуется имя лог-файла. Лог-вывод содержит значения контрольных сумм для каждой страницы файла таблицы. Для нескомпрессированных таблиц также предоставляются значения LSN. Опция --log заменяет опцию --debug, которая была доступна в более ранних выпусках. Пример использования:

    innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd
    

    или:

    innochecksum -l /tmp/log.txt ../data/test/tab1.ibd
    
  • Опция -.

    Укажите опцию - для чтения из стандартного ввода. Если опция - отсутствует, когда ожидается “чтение из стандартного ввода”, утилита innochecksum выводит информацию об использовании, указывая, что опция “-” была пропущена. Примеры использования:

    cat t1.ibd | innochecksum -
    

    В этом примере innochecksum записывает алгоритм контрольной суммы crc32 в a.ibd, не изменяя исходный файл t1.ibd.

    cat t1.ibd | innochecksum --write=crc32 - > a.ibd
    

Запуск innochecksum для нескольких файлов пользовательских файлов табличного пространства

В следующих примерах показано, как запустить innochecksum для нескольких файлов пользовательских табличных пространств (файлы .ibd).

Запустите innochecksum для всех файлов табличного пространства (файлы .ibd) в базе данных “test”:

innochecksum ./data/test/*.ibd

Запустите innochecksum для всех файлов табличного пространства (файлы .ibd), имена которых начинаются с “t”:

innochecksum ./data/test/t*.ibd

Запустите innochecksum для всех файлов табличного пространства (файлы .ibd) в каталоге data:

innochecksum ./data/*/*.ibd
Примечание

Запуск innochecksum для нескольких файлов пользовательских табличных пространств не поддерживается в операционных системах Windows, так как оболочки Windows, такие как cmd.exe, не поддерживают расширение шаблонов поиска. В системах Windows innochecksum должен запускаться отдельно для каждого файла пользовательского табличного пространства. Например:

innochecksum.exe t1.ibd
innochecksum.exe t2.ibd
innochecksum.exe t3.ibd

Запуск innochecksum для нескольких файлов системного табличного пространства

По умолчанию, существует только один InnoDB файл системного табличного пространства (ibdata1), но несколько файлов для системного табличного пространства можно определить, используя опцию innodb_data_file_path. В следующем примере три файла для системного табличного пространства определены с помощью опции innodb_data_file_path: ibdata1, ibdata2 и ibdata3.

./bin/mysqld --no-defaults --innodb-data-file-path="ibdata1:10M;ibdata2:10M;ibdata3:10M:autoextend"

Три файла (ibdata1, ibdata2 и ibdata3) образуют одно логическое системное табличное пространство. Чтобы запустить innochecksum на нескольких файлах, образующих одно логическое системное табличное пространство, innochecksum требует опции - для чтения файлов табличного пространства из стандартного ввода, что эквивалентно конкатенации нескольких файлов для создания одного файла. Для приведенного выше примера команда innochecksum будет следующей:

cat ibdata* | innochecksum -

Обратитесь к информации об опциях innochecksum для получения дополнительной информации об опции “-”.

Примечание

Запуск innochecksum на нескольких файлах в одном табличном пространстве не поддерживается в операционных системах Windows, так как оболочки Windows, такие как cmd.exe, не поддерживают расширение шаблонов glob. В системах Windows innochecksum должен запускаться отдельно для каждого файла системного табличного пространства. Например:

innochecksum.exe ibdata1
innochecksum.exe ibdata2
innochecksum.exe ibdata3

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

Spec-Zone.ru

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