4.6.3 myisamchk — MyISAM Table-Maintenance Utility myisamchk General Options myisamchk Check Options myisamchk Repair Options Other myisamchk Options Obtaining Table Information with myisamchk myisamchk Memory Usage


You can also use the CHECK TABLE and REPAIR TABLE statements to check and repair MyISAM tables. See Section, “CHECK TABLE Syntax”, and Section, “REPAIR TABLE Syntax”.

The use of myisamchk with partitioned tables is not supported.



Invoke myisamchk like this:

shell> myisamchk [options] tbl_name ...




You can name several tables on the myisamchk command line if you wish. You can also specify a table by naming its index file (the file with the .MYI suffix). This enables you to specify all tables in a directory by using the pattern *.MYI. For example, if you are in a database directory, you can check all the MyISAM tables in that directory like this:

shell> myisamchk *.MYI



You can even check all tables in all databases by specifying a wildcard with the path to the MySQL data directory:


The recommended way to quickly check all MyISAM tables is:



          --key_buffer_size=64M --myisam_sort_buffer_size=64M \
          --read_buffer_size=1M --write_buffer_size=1M \

This command assumes that you have more than 64MB free. For more information about memory allocation with myisamchk, see Section, “myisamchk Memory Usage”.

For additional information about using myisamchk, see Section 7.6, “MyISAM Table Maintenance and Crash Recovery”.


You must ensure that no other program is using the tables while you are running myisamchk. The most effective means of doing so is to shut down the MySQL server while running myisamchk, or to lock all tables that myisamchk is being used on.


warning: clients are using or haven't closed the table properly

This means that you are trying to check a table that has been updated by another program (such as the mysqld server) that hasn't yet closed the file or that has died without closing the file properly, which can sometimes lead to the corruption of one or more MyISAM tables.


However, the easiest way to avoid this problem is to use CHECK TABLE instead of myisamchk to check tables. See Section, “CHECK TABLE Syntax”.

myisamchk supports the following options, which can be specified on the command line or in the [myisamchk] group of an option file. For information about option files used by MySQL programs, see Section 4.2.6, “Using Option Files”.

Table 4.12 myisamchk Options

--analyzeAnalyze the distribution of key values  
--backupMake a backup of the .MYD file as file_name-time.BAK  
--block-search=offsetFind the record that a block at the given offset belongs to  
--checkCheck the table for errors  
--check-only-changedCheck only tables that have changed since the last check  
--correct-checksumCorrect the checksum information for the table  
--data-file-length=lenMaximum length of the data file (when re-creating data file when it is full)  
--debug[=debug_options]Write a debugging log  
--defaults-extra-file=file_nameRead option file in addition to usual option files  
--defaults-file=file_nameRead only named option file  
--defaults-group-suffix=strOption group suffix value  
--descriptionPrint some descriptive information about the table  
--extend-checkDo very thorough table check or repair that tries to recover every possible row from the data file  
--fastCheck only tables that haven't been closed properly  
--forceDo a repair operation automatically if myisamchk finds any errors in the table  
--forceOverwrite old temporary files. For use with the -r or -o option  
--ft_max_word_len=#Maximum word length for FULLTEXT indexes  
--ft_min_word_len=#Minimum word length for FULLTEXT indexes  
--ft_stopword_file=valueUse stopwords from this file instead of built-in list  
--HELPDisplay help message and exit  
--helpDisplay help message and exit  
--informationPrint informational statistics about the table that is checked  
--key_buffer_size=#Size of buffer used for index blocks for MyISAM tables  
--keys-used=valA bit-value that indicates which indexes to update  
--max-record-length=lenSkip rows larger than the given length if myisamchk cannot allocate memory to hold them  
--medium-checkDo a check that is faster than an --extend-check operation  
--myisam_block_size=#Block size to be used for MyISAM index pages  
--myisam_sort_buffer_size=#The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE5.5.29 
--no-defaultsRead no option files  
--parallel-recoverUses the same technique as -r and -n, but creates all the keys in parallel, using different threads (beta)  
--print-defaultsPrint defaults  
--quickAchieve a faster repair by not modifying the data file.  
--read_buffer_size=#Each thread that does a sequential scan allocates a buffer of this size for each table it scans  
--read-onlyDon't mark the table as checked  
--recoverDo a repair that can fix almost any problem except unique keys that aren't unique  
--safe-recoverDo a repair using an old recovery method that reads through all rows in order and updates all index trees based on the rows found  
--set-auto-increment[=value]Force AUTO_INCREMENT numbering for new records to start at the given value  
--set-collation=nameSpecify the collation to use for sorting table indexes  
--silentSilent mode  
--sort_buffer_size=#The buffer that is allocated when sorting the index when doing a REPAIR or when creating indexes with CREATE INDEX or ALTER TABLE 5.5.29
--sort-indexSort the index tree blocks in high-low order  
--sort-records=#Sort records according to a particular index  
--sort-recoverForce myisamchk to use sorting to resolve the keys even if the temporary files would be very large  
--stats_method=valueSpecifies how MyISAM index statistics collection code should treat NULLs  
--tmpdir=pathPath of the directory to be used for storing temporary files  
--unpackUnpack a table that was packed with myisampack  
--update-stateStore information in the .MYI file to indicate when the table was checked and whether the table crashed  
--verboseVerbose mode  
--versionDisplay version information and exit  
--write_buffer_size=#Write buffer size