Repair corrupted MySQL table with myisamchk
The myisamchk utility gets information about your database tables or checks, repairs, or optimizes them. myisamchk works with MyISAM tables (tables that have .MYD and .MYI files for storing data and indexes).
Invoke myisamchk like this:
shell> myisamchk [options] tbl_name ...
The options specify what you want myisamchk to do. They are described in the
following sections. You can also get a list of options by invoking myisamchk
--help.
With no options, myisamchk simply checks your table as the default operation.
To get more information or to tell myisamchk to take corrective action, specify
options as described in the following discussion.
tbl_name is the database table you want to check or repair. If you run myisamchk
somewhere other than in the database directory, you must specify the path to
the database directory, because myisamchk has no idea where the database is
located. In fact, myisamchk doesn't actually care whether the files you are
working on are located in a database directory. You can copy the files that
correspond to a database table into some other location and perform recovery
operations on them there.
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 allows 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
If you are not in the database directory, you can check all the tables there
by specifying the path to the directory:
shell> myisamchk /path/to/database_dir/*.MYI
You can even check all tables in all databases by specifying a wildcard with
the path to the MySQL data directory:
shell> myisamchk /path/to/datadir/*/*.MYI
The recommended way to quickly check all MyISAM tables is:
shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI
If you want to check all MyISAM tables and repair any that are corrupted, you
can use the following command:
shell> 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
This command assumes that you have more than 64MB free.
You must ensure that no other program is using the tables while you are running
myisamchk. Otherwise, when you run myisamchk, it may display the following error
message:
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.
If mysqld is running, you must force it to flush any table modifications that
are still buffered in memory by using FLUSH TABLES. You should then ensure that
no one is using the tables while you are running myisamchk. The easiest way
to avoid this problem is to use CHECK TABLE instead of myisamchk to check tables.
Repair MySQL with myisamchk
Back to MySQL Tips
|