6.6.2 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-snumФормат командной строки --start-page=#Тип Numeric Значение по умолчанию 0Начать с этого номера страницы. Пример использования:
innochecksum --start-page=600 ../data/test/tab1.ibd
или:
innochecksum -s 600 ../data/test/tab1.ibd
-
--end-page=,num-enumФормат командной строки --end-page=#Тип Numeric Значение по умолчанию 0Минимальное значение 0Максимальное значение 18446744073709551615Завершить на этом номере страницы. Пример использования:
innochecksum --end-page=700 ../data/test/tab1.ibd
или:
innochecksum --p 700 ../data/test/tab1.ibd
-
--page=,num-pnumФормат командной строки --page=#Тип Integer Значение по умолчанию 0Проверить только этот номер страницы. Пример использования:
innochecksum --page=701 ../data/test/tab1.ibd
-
--strict-check,-CФормат командной строки --strict-check=algorithmТип Enumeration Значение по умолчанию crc32Допустимые значения innodbcrc32noneУказывает строгий алгоритм вычисления контрольной суммы. Доступны варианты
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=#Тип Целое число Значение по умолчанию 0Минимальное значение 0Максимальное значение 18446744073709551615Максимальное количество допущения несовпадений контрольных сумм перед завершением innochecksum. Значение по умолчанию равно 0. Если
--allow-mismatches=N, где, допускаетсяN>=0Nнесовпадений, и 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-wnumФормат командной строки --write=algorithmТип Перечисление Значение по умолчанию crc32Допустимые значения innodbcrc32noneПереписать контрольную сумму. При переписывании недействительной контрольной суммы необходимо использовать параметр
--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Тип Булево Значение по умолчанию 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. Пример использования:
innochecksum --log=/tmp/log.txt ../data/test/tab1.ibd
или:
innochecksum -l /tmp/log.txt ../data/test/tab1.ibd
-
Параметр
-.Укажите параметр
-для чтения из стандартного ввода. Если параметр-отсутствует, когда ожидается “чтение из стандартного ввода”, innochecksum выводит информацию об использовании 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, не поддерживают расширение шаблонов подстановок. В системах Windows innochecksum необходимо запускать отдельно для каждого файла системного табличного пространства. Например:
innochecksum.exe ibdata1
innochecksum.exe ibdata2
innochecksum.exe ibdata3
© 2025 Oracle
Licensed under the GPLv2 License.