myisamchk for Table Maintenance and Crash Recovery
myisamchk Invocation Syntax
myisamchk
myisamchk
myisamchk
myisamchk Memory Usage
myisamchk for Crash Recovery
myisamchk for Crash Recovery
If you run mysqld with --skip-external-locking (which is the
default on some systems, like Linux), you can't reliably use myisamchk
to check a table when mysqld is using the same table. If you
can be sure that no one is accessing the tables through mysqld
while you run myisamchk, you only have to do mysqladmin
flush-tables before you start checking the tables. If you can't
guarantee the above, then you must take down mysqld while you
check the tables. If you run myisamchk while mysqld is updating
the tables, you may get a warning that a table is corrupt even if it
isn't.
If you are not using --skip-external-locking, you can use
myisamchk to check tables at any time. While you do this, all clients
that try to update the table will wait until myisamchk is ready before
continuing.
If you use myisamchk to repair or optimise tables, you
must always ensure that the mysqld server is not using
the table (this also applies if you are using --skip-external-locking).
If you don't take down mysqld you should at least do a
mysqladmin flush-tables before you run myisamchk.
Your tables may be corrupted if the server and myisamchk
access the tables simultaneously.
This chapter describes how to check for and deal with data corruption in MySQL databases. If your tables get corrupted frequently you should try to find the reason for this! See section A.4.1 What To Do If MySQL Keeps Crashing.
The MyISAM table section contains reason for why a table could be
corrupted. See section 7.1.3 MyISAM Table Problems.
When performing crash recovery, it is important to understand that each table
tbl_name in a database corresponds to three files in the database
directory:
| File | Purpose |
| `tbl_name.frm' | Table definition (form) file |
| `tbl_name.MYD' | Datafile |
| `tbl_name.MYI' | Index file |
Each of these three file types is subject to corruption in various ways, but problems occur most often in datafiles and index files.
myisamchk works by creating a copy of the `.MYD' (data) file
row by row. It ends the repair stage by removing the old `.MYD'
file and renaming the new file to the original file name. If you use
--quick, myisamchk does not create a temporary `.MYD'
file, but instead assumes that the `.MYD' file is correct and only
generates a new index file without touching the `.MYD' file. This
is safe, because myisamchk automatically detects if the
`.MYD' file is corrupt and aborts the repair in this case. You can
also give two --quick options to myisamchk. In this case,
myisamchk does not abort on some errors (like duplicate key) but
instead tries to resolve them by modifying the `.MYD'
file. Normally the use of two --quick options is useful only if
you have too little free disk space to perform a normal repair. In this
case you should at least make a backup before running myisamchk.
| Posted by Martin Mokrejs on Thursday August 7 2003, @3:46pm | [Delete] [Edit] |
It would be nice to explain what is the relation of myisamchk to .TMD, .OLD and .TMM files. I think .TMD and .OLD get created by myisampack, but I somehow believe .TMM is the backup file of .MYI. But, I cannot find it in the documentation nor can I find in documentation --backup option for "myisamchk -rq", which rebuilds the index file.
So what and when create .TMM file?
Can "myisamchk -rq" create backup of .MYI file?