6.6.4 myisamchk — Утилита обслуживания таблиц MyISAM
Утилита myisamchk получает информацию о таблицах базы данных или проверяет, восстанавливает или оптимизирует их. myisamchk работает с MyISAM таблицами (таблицами, у которых есть .MYD и .MYI файлы для хранения данных и индексов).
Вы также можете использовать команды CHECK TABLE и REPAIR TABLE для проверки и восстановления MyISAM таблиц. См. Раздел 15.7.3.2, «Команда CHECK TABLE» и Раздел 15.7.3.5, «Команда REPAIR TABLE».
Использование myisamchk с разграниченными таблицами не поддерживается.
Лучше сделать резервную копию таблицы перед выполнением операции восстановления; в некоторых обстоятельствах операция может привести к потере данных. Возможные причины включают, но не ограничиваются, ошибками файловой системы.
Вызов myisamchk выглядит так:
myisamchk [options] tbl_name ...
options указывают, что вы хотите сделать с помощью myisamchk. Они описаны в следующих разделах. Список параметров также можно получить, вызвав myisamchk --help.
Без параметров myisamchk просто проверяет таблицу, так как это действие по умолчанию. Чтобы получить больше информации или указать myisamchk выполнить корректирующие действия, укажите параметры, как описано ниже.
tbl_name — это таблица базы данных, которую вы хотите проверить или восстановить. Если вы запускаете myisamchk не в каталоге базы данных, вы должны указать путь к каталогу базы данных, потому что myisamchk не знает, где находится база данных. На самом деле myisamchk не заботится о том, находятся ли файлы, с которыми он работает, в каталоге базы данных. Вы можете скопировать файлы, соответствующие таблице базы данных, в другое место и выполнить там операции восстановления.
Вы можете указать несколько таблиц в командной строке myisamchk, если хотите. Вы также можете указать таблицу, указав имя её файла индекса (файл с .MYI расширением). Это позволяет указывать все таблицы в каталоге, используя шаблон *.MYI. Например, если вы находитесь в каталоге базы данных, вы можете проверить все MyISAM таблицы в этом каталоге так:
myisamchk *.MYI
Если вы не находитесь в каталоге базы данных, вы можете проверить все таблицы там, указав путь к каталогу:
myisamchk /path/to/database_dir/*.MYI
Вы даже можете проверить все таблицы во всех базах данных, указав подстановку пути к каталогу данных MySQL:
myisamchk /path/to/datadir/*/*.MYI
Рекомендуемый способ быстро проверить все MyISAM таблицы:
myisamchk --silent --fast /path/to/datadir/*/*.MYI
Если вы хотите проверить все MyISAM таблицы и восстановить любые поврежденные, можно использовать следующую команду:
myisamchk --silent --force --fast --update-state \
--key_buffer_size=64M --myisam_sort_buffer_size=64M \
--read_buffer_size=1M --write_buffer_size=1M \
/path/to/datadir/*/*.MYI
Эта команда предполагает, что у вас более 64 МБ свободной памяти. Более подробную информацию об использовании памяти в myisamchk см. в Разделе 6.6.4.6, «Использование памяти myisamchk».
Для получения дополнительной информации об использовании myisamchk см. Раздел 9.6, «Обслуживание таблиц MyISAM и восстановление после сбоя».
Необходимо убедиться, что ни одна другая программа не использует таблицы во время работы myisamchk. Наиболее эффективным способом является остановка сервера MySQL во время работы myisamchk или блокировка всех таблиц, на которых используется myisamchk.
В противном случае при запуске myisamchk может отобразиться следующее сообщение об ошибке:
warning: clients are using or haven't closed the table properly
Это означает, что вы пытаетесь проверить таблицу, которая обновляется другой программой (например, сервером mysqld), которая ещё не закрыла файл или завершила работу, не закрыв файл должным образом, что иногда может привести к повреждению одной или нескольких MyISAM таблиц.
Если сервер mysqld запущен, необходимо заставить его сбросить любые изменения в буфере памяти таблиц, используя FLUSH TABLES. Затем необходимо убедиться, что никто не использует таблицы во время работы myisamchk.
Однако самый простой способ избежать этой проблемы — использовать CHECK TABLE вместо myisamchk для проверки таблиц. См. Раздел 15.7.3.2, «Команда CHECK TABLE».
myisamchk поддерживает следующие параметры, которые могут быть указаны в командной строке или в группе [myisamchk] файла параметров. Информацию о файлах параметров, используемых программами MySQL, см. в Разделе 6.2.2.2, «Использование файлов параметров».
Таблица 6.17 Параметры myisamchk
| Имя параметра | Описание |
|---|---|
| --analyze | Проанализировать распределение значений ключей |
| --backup | Создать резервную копию файла .MYD как file_name-time.BAK |
| --block-search | Найти запись, к которой относится блок по заданному смещению |
| --character-sets-dir | Директория, в которой находятся наборы символов |
| --check | Проверить таблицу на ошибки |
| --check-only-changed | Проверить только таблицы, изменённые с момента последней проверки |
| --correct-checksum | Исправить информацию о контрольной сумме таблицы |
| --data-file-length | Максимальная длина файла данных (при повторном создании файла данных, когда он заполнен) |
| --debug | Записать отладочный журнал |
| --decode_bits | Decode_bits |
| --defaults-extra-file | Прочитать указанный файл параметров дополнительно к обычным файлам параметров |
| --defaults-file | Прочитать только указанный файл параметров |
| --defaults-group-suffix | Значение суффикса группы параметров |
| --description | Вывести некоторую описательную информацию о таблице |
| --extend-check | Провести очень тщательную проверку или восстановление таблицы, которая пытается восстановить каждую возможную строку из файла данных |
| --fast | Проверить только таблицы, которые не были должным образом закрыты |
| --force | Автоматически выполнить операцию восстановления, если myisamchk обнаружит какие-либо ошибки в таблице |
| --force | Перезаписать старые временные файлы. Для использования с параметрами -r или -o |
| --ft_max_word_len | Максимальная длина слова для индексов FULLTEXT |
| --ft_min_word_len | Минимальная длина слова для индексов FULLTEXT |
| --ft_stopword_file | Использовать стоп-слова из этого файла вместо встроенного списка |
| --HELP | Отобразить сообщение справки и завершить |
| --help | Отобразить сообщение справки и завершить |
| --information | Вывести статистическую информацию о проверяемой таблице |
| --key_buffer_size | Размер буфера, используемого для блоков индексов для таблиц MyISAM |
| --keys-used | Значение, представляющее собой битовую маску, указывающую, какие индексы обновить |
| --max-record-length | Пропустить строки, длина которых больше заданной, если myisamchk не может выделить память для их хранения |
| --medium-check | Провести проверку, которая быстрее, чем операция --extend-check |
| --myisam_block_size | Размер блока, который будет использоваться для страниц индексов MyISAM |
| --myisam_sort_buffer_size | Буфер, выделяемый при сортировке индекса при выполнении REPAIR или при создании индексов с CREATE INDEX или ALTER TABLE |
| --no-defaults | Не читать файлы параметров |
| --parallel-recover | Использует ту же технику, что и -r и -n, но создаёт все ключи параллельно, используя разные потоки (бета-версия) |
| --print-defaults | Вывести значения параметров по умолчанию |
| --quick | Обеспечить более быстрое восстановление, не изменяя файл данных |
| --read_buffer_size | Каждый поток, выполняющий последовательный поиск, выделяет буфер такого размера для каждой сканируемой таблицы |
| --read-only | Не отмечать таблицу как проверенную |
| --recover | Выполнить восстановление, которое может исправить практически любую проблему, кроме уникальных ключей, которые не уникальны |
| --safe-recover | Выполнить восстановление с помощью старого метода восстановления, который считывает все строки в порядке и обновляет все деревья индексов на основе найденных строк |
| --set-auto-increment | Принудительно установить нумерацию AUTO_INCREMENT для новых записей, чтобы начать с указанного значения |
| --set-collation | Указать кодировку для сортировки индексов таблиц |
| --silent | Без отображения сообщений |
| --sort_buffer_size | Буфер, выделяемый при сортировке индекса при выполнении REPAIR или при создании индексов с CREATE INDEX или ALTER TABLE |
| --sort-index | Отсортировать блоки дерева индекса по возрастанию |
| --sort_key_blocks | sort_key_blocks |
| --sort-records | Отсортировать записи в соответствии с определённым индексом |
| --sort-recover | Принудительно использовать сортировку myisamchk для разрешения ключей, даже если временные файлы будут очень большими |
| --stats_method | Указывает, как код сбора статистики индексов MyISAM должен обрабатывать NULL |
| --tmpdir | Директория, которая будет использоваться для хранения временных файлов |
| --unpack | Распаковать таблицу, которая была упакована с помощью myisampack |
| --update-state | Сохранить информацию в файле .MYI, чтобы указать, когда таблица была проверена и произошёл ли сбой таблицы |
| --verbose | Режим подробной информации |
| --version | Отобразить информацию о версии и завершить |
| --wait | Дождаться разблокировки заблокированной таблицы вместо завершения |
| --write_buffer_size | Размер буфера записи |
© 2025 Oracle
Licensed under the GPLv2 License.