myisamchk
myisamchk — это командная утилита для проверки, восстановления и оптимизации неразделенных таблиц MyISAM.
myisamchk запускается из командной строки следующим образом:
myisamchk [OPTIONS] tables[.MYI]
Полный список опций приведен ниже. Можно указать одну или несколько таблиц MyISAM. У таблиц MyISAM есть связанный с ними файл индекса .MYI, и имя таблицы можно указывать с расширением .MYI или без него. Использование расширения позволяет использовать подстановочные знаки, поэтому можно запустить myisamchk для всех таблиц MyISAM в базе данных с помощью *.MYI.
Путь к файлам также необходимо указать, если они не находятся в текущем каталоге.
myisamchk не следует запускать, пока кто-либо имеет доступ к любым из затронутых таблиц. Также рекомендуется создать резервную копию перед запуском.
Без опций myisamchk просто проверяет таблицу в качестве операции по умолчанию.
Следующие опции можно задать в качестве командных опций для myisamchk или в разделе [myisamchk] файла my.cnf.
Общие опции
| Опция | Описание |
|---|---|
| -H, --HELP | Показать справку и выйти. Опции представлены в одном списке. |
| -?, --help | Показать справку и выйти. Опции сгруппированы по типу операции. |
| -debug=options, -# options | Записать отладочный журнал. Типичная строка debug_options — ´d:t:o,file_name´. По умолчанию — ´d:t:o,/tmp/myisamchk.trace´. (Доступно только в отладочных сборках) |
| -t path, --tmpdir=path | Путь для временных файлов. На Unix можно указать несколько путей, разделенных двоеточием (:), а на Windows — точкой с запятой (;). Они будут использоваться в циклическом порядке. Если не задано, используется переменная среды TMPDIR. |
| -s, --silent | Выводить только ошибки. Можно использовать две опции -s (-ss), чтобы сделать myisamchk очень тихим. |
| -v, --verbose | Выводить больше информации. Это можно использовать с --description и --check. Используйте несколько -v для большей подробности. |
| -V, --version | Вывести версию и выйти. |
| -w, --wait | Если таблица заблокирована, подождать, вместо возврата ошибки. |
| --print-defaults | Вывести список аргументов программы и выйти. |
| --no-defaults | Не читать опции по умолчанию из файла опций. |
| --defaults-file=filename | Читать опции по умолчанию только из заданного файла filename, который может быть полным путем или путем, относительным к текущему каталогу. |
| --defaults-extra-file=filename | Читать файл filename, который может быть полным путем или путем, относительным к текущему каталогу, после чтения глобальных файлов. |
| --defaults-group-suffix=str | Также читать группы с суффиксом str. Например, --defaults-group-suffix=x будет читать группы [myisamchk] и [myisamchk_x] |
Следующие переменные также можно задать, используя --var_name=value, например, --ft_min_word_len=5
| Переменная | Значение по умолчанию |
|---|---|
| decode_bits | 9 |
| ft_max_word_len | зависит от версии |
| ft_min_word_len | 4 |
| ft_stopword_file | встроенный список |
| key_buffer_size | 1044480 |
| key_cache_block_size | 1024 |
| myisam_block_size | 1024 |
| myisam_sort_buffer_size | 134216704 |
| myisam_sort_key_blocks | 16 |
| read_buffer_size | 262136 |
| sort_buffer_size | 134216704 |
| sort_key_blocks | 16 |
| stats_method | nulls_unequal |
| write_buffer_size | 262136 |
Проверка таблиц
Если опция не указана, myisamchk выполнит проверку таблицы. Можно проверить таблицы MyISAM без остановки или ограничения доступа к серверу, используя CHECK TABLE вместо этого.
Доступны следующие опции проверки:
| Опция | Описание |
|---|---|
| -c, --check | Проверить таблицу на ошибки. Это операция по умолчанию, если не указана опция, явно выбирающая тип операции. |
| -e, --extend-check | Проверить таблицу очень тщательно. Используйте только в крайних случаях, так как это может быть медленно, и myisamchk обычно должен уметь обнаружить ошибки в таблице даже без этого переключателя. Увеличение key_buffer_size может помочь ускорить процесс. |
| -F, --fast | Проверять только таблицы, которые не были закрыты должным образом. |
| -C, --check-only-changed | Проверить только таблицы, которые изменились с момента последней проверки. |
| -f, --force | Перезапустить с '-r' (восстановить), если в таблице есть какие-либо ошибки. Состояния будут обновлены так же, как и с '--update-state'. |
| -i, --information | Вывести статистическую информацию о проверяемой таблице. |
| -m, --medium-check | Быстрее, чем extend-check, но находит только 99,99% всех ошибок. Достаточно для большинства случаев. |
| -U --update-state | Отметить таблицы как аварийные, если найдены какие-либо ошибки. Это должно использоваться для получения полной пользы от опции --check-only-changed, но вы не должны использовать эту опцию, если сервер mysqld использует таблицу, и вы запускаете его с отключенным внешним блокированием. |
| -T, --read-only | Не отмечать таблицу как проверенную. Это полезно, если вы используете myisamchk для проверки таблицы, которая используется другой программой, не использующей блокировку, например, mysqld, запущенный с отключенным внешним блокированием. |
Восстановление таблиц
Также можно восстановить таблицы MyISAM, используя REPAIR TABLE.
Следующие опции восстановления доступны и применимы при использовании '-r' или '-o':
| Опция | Описание |
|---|---|
| -B, --backup | Создать резервную копию файла .MYD как 'filename-time.BAK'. |
| --correct-checksum | Исправить информацию о контрольной сумме для таблицы. |
| -D len, --data-file-length=# | Максимальная длина файла данных (при повторном создании файла данных, когда он заполнен). |
| -e, --extend-check | Попытаться восстановить каждую возможную строку из файла данных. Обычно это также найдет много мусорных строк; Не используйте эту опцию, если вы не в отчаянии. |
| -f, --force | Перезаписать старые временные файлы. Добавление ещё одного --force позволит избежать ошибок 'myisam_sort_buffer_size слишком мал'. В этом случае мы попытаемся выполнить восстановление с заданным myisam_sort_buffer_size и динамически выделим столько буферов управления, сколько необходимо. |
| -k val, --keys-used=# | Указать, какие ключи обновлять. Значение — битовая маска используемых ключей. Каждый двоичный бит соответствует индексу таблицы, причём первый индекс — бит 0. 0 отключает все обновления индексов, что полезно для более быстрых вставок. Отключенные индексы можно снова включить, используя myisamchk -r. |
| --create-missing-keys | Создать отсутствующие ключи. Это предполагает, что файл данных правильный и что количество строк, хранящихся в файле индекса, правильное. Включает --quick |
| --max-record-length=# | Пропустить строки, длина которых больше этой, если myisamchk не может выделить память для их хранения. |
| -r, --recover | Может исправить практически всё, кроме уникальных ключей, которые не являются уникальными (редкое явление). Обычно это лучшая опция, которую следует попробовать в первую очередь. Увеличьте myisam_sort_buffer_size для лучшей производительности. |
| -n, --sort-recover | Принудительно восстанавливает с сортировкой, даже если временный файл будет очень большим. |
| -p, --parallel-recover | Использует ту же технику, что и '-r' и '-n', но создаёт все ключи параллельно, в разных потоках. |
| -o, --safe-recover | Использует старый метод восстановления; медленнее, чем '-r', но использует меньше места на диске и может обработать несколько случаев, когда '-r' сообщает, что не может исправить файл данных. Увеличьте key_buffer_size для лучшей производительности. |
| --character-sets-dir=directory_name | Директория, где установлены наборы символов. |
| --set-collation=name | Изменить сортировку (и, следовательно, набор символов), используемую индексом. |
| -q, --quick | Более быстрое восстановление, не изменяя файл данных. Можно указать второе '-q', чтобы принудить myisamchk изменить исходный файл данных в случае дублирующих ключей. ПРИМЕЧАНИЕ: Таблицы, где файл данных повреждён, не могут быть исправлены с помощью этой опции. |
| -u, --unpack | Распаковать файл, упакованный с помощью myisampack. |
Другие действия
| Опция | Описание |
|---|---|
| -a, --analyze | Проанализировать распределение ключей. Ускорит некоторые соединения, так как оптимизатор соединений сможет лучше выбрать порядок соединения таблиц и какие индексы использовать. Распределение, вычисленное с помощью '--description --verbose table_name', или SHOW INDEX FROM table_name. |
| --stats_method=name | Указывает, как код сбора статистики индексов должен обрабатывать NULL. Возможные значения name — "nulls_unequal" (по умолчанию), "nulls_equal" (эмулирует поведение MySQL 4.0), и "nulls_ignored". |
| -d, --description | Вывести описательную информацию о таблице. Указание опции --verbose один или два раза даёт дополнительную информацию. |
| -A [value], --set-auto-increment[=value] | Принудительно установить auto_increment к этому или большему значению. Если значение не указано, то устанавливает следующее значение автоинкремента на максимальное использованное значение для автоключа + 1. |
| -S, --sort-index | Отсортировать блоки дерева индексов в порядке убывания. Это оптимизирует поиск и ускоряет сканирование таблиц, использующих индексы. |
| -R index_num, --sort-records=# | Сортировать записи по заданному индексу (как указано номером индекса). Это делает ваши данные намного более локализованными и может ускорить SELECT и ORDER BY, использующие этот индекс. Первое сортирование может быть ОЧЕНЬ медленным! Для просмотра номеров индексов, SHOW INDEX отображает индексы таблиц в том же порядке, что и myisamchk. Первый индекс — 1. |
| -b offset, --block-search=offset | Найти запись, к которой принадлежит блок по заданному offset. |
Для более подробной информации см. Использование памяти и диска с myisamchk.
Примеры
Проверить все таблицы MyISAM в текущей директории:
myisamchk *.MYI
Если вы не находитесь в директории базы данных, вы можете проверить все таблицы там, указав путь к директории:
myisamchk /path/to/database_dir/*.MYI
Проверить все таблицы во всех базах данных, указав подстановку с путем к директории данных MariaDB:
myisamchk /path/to/datadir/*/*.MYI
Рекомендуемый способ быстро проверить все таблицы MyISAM:
myisamchk --silent --fast /path/to/datadir/*/*.MYI
Проверить все таблицы MyISAM и исправить все поврежденные:
myisamchk --silent --force --fast --update-state \ --key_buffer_size=64M --sort_buffer_size=64M \ --read_buffer_size=1M --write_buffer_size=1M \ /path/to/datadir/*/*.MYI
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/myisamchk/