myisamchk
запускается следующим образом:
shell> myisamchk [options] tbl_name
Опции options определяют, что должна сделать myisamchk
. В данном разделе
дается описание этих опций (список опций можно также получить, запустив
myisamchk --help
). Если опции не указаны, myisamchk
просто проверяет
таблицу. Чтобы получить дополнительную информацию или указать myisamchk
выполнить корректирующие действия, надо задать опции, как это описано в
этом и в следующих разделах.
tbl_name
- это таблица базы данных, которую нужно проверить/исправить.
Если myisamchk
запускается не из каталога базы данных, то следует задать
путь к файлу, поскольку myisamchk
не имеет представления о том, где искать
базу данных. В действительности для myisamchk
не важно, где находятся
рабочие файлы - в каталоге базы данных или нет; можно скопировать файлы,
относящиеся к базе данных, в другое место и выполнить операции
восстановления над ними там.
При желании в командной строке myisamchk
можно перечислить имена
нескольких таблиц. В качестве имени можно также указать имя индексного
файла (с суффиксом .MYI
), что позволит задавать все таблицы в каталоге при
помощи шаблона *.MYI
. Например, находясь в каталоге базы данных, можно
проверить все таблицы этого каталога следующим образом:
shell> myisamchk *.MYI
Если каталог базы данных не является текущим, то все таблицы каталога можно проверить, указав к нему путь:
shell> myisamchk /path/to/database_dir/*.MYI
Можно даже проверить все таблицы во всех базах данных, если задать шаблон вместе с путем к каталогу данных MySQL:
shell> myisamchk /path/to/datadir/*/*.MYI
Быстро проверять все таблицы рекомендуется следующим образом:
myisamchk --silent --fast /path/to/datadir/*/*.MYI isamchk --silent /path/to/datadir/*/*.ISM
Если необходимо проверить все таблицы и исправить все поврежденные из них, можно использовать следующую строку:
myisamchk --silent --force --fast --update-state -O key_buffer=64M \ -O sort_buffer=64M -O read_buffer=1M -O write_buffer=1M \ /path/to/datadir/*/*.MYI isamchk --silent --force -O key_buffer=64M -O sort_buffer=64M \ -O read_buffer=1M -O write_buffer=1M /path/to/datadir/*/*.ISM
Эти команды предполагают, что имеется более чем 64 Mб свободного пространства.
Следует отметить, что если выдается ошибка, подобная следующей:
myisamchk: warning: 1 clients is using or hasn't closed the table properly
то это означает, что делается попытка проверить таблицу, обновленную
другой программой (такой как mysqld
), которая еще не закрыла файл или чье
выполнение было прервано без возможности корректно закрыть файл.
Если mysqld
запущен, то необходимо принудительно вызвать
синхронизацию/закрытие всех таблиц с помощью FLUSH TABLES
и обеспечить,
чтобы никто не использовал таблиц, пока выполняется myisamchk
. В версии
MySQL 3.23 самый простой способ избежать этой проблемы заключается в
применении для проверки таблиц команды CHECK TABLE
вместо myisamchk
.