REPAIR TABLE SyntaxREPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name[,tbl_name...] [QUICK] [EXTENDED] [USE_FRM]
REPAIR TABLE works only on MyISAM tables and is the same
as running myisamchk -r table_name on the table.
Normally you should never have to run this command, but if disaster strikes
you are very likely to get back all your data from a MyISAM table with
REPAIR TABLE. If your tables get corrupted a lot, you should
try to find the reason for it, to eliminate the need to use REPAIR
TABLE.
See section A.4.1 What To Do If MySQL Keeps Crashing. See section 7.1.3 MyISAM Table Problems.
REPAIR TABLE repairs a possibly corrupted table. The command returns a
table with the following columns:
| Column | Value |
| Table | Table name |
| Op | Always repair
|
| Msg_type | One of status, error, info, or warning
|
| Msg_text | The message |
Note that the statement may produce many rows of information for each repaired
table.
The last one row will be of Msg_type status and should
normally be OK.
If you don't get OK, you should try
repairing the table with myisamchk --safe-recover, as REPAIR TABLE
does not yet implement all the options of myisamchk. In the near
future, we will make it more flexible.
If QUICK is given, REPAIR TABLE tries to repair
only the index tree.
If you use EXTENDED, MySQL will create the index row
by row instead of creating one index at a time with sorting; this may be
better than sorting on fixed-length keys if you have long CHAR
keys that compress very well. This type of repair is like that done by
myisamchk --safe-recover.
As of MySQL 4.0.2, there is a USE_FRM mode for REPAIR.
Use it if the `.MYI' file is missing or if its header is corrupted.
In this mode MySQL will recreate the table, using information from the
`.frm' file. This kind of repair cannot be done with myisamchk.
Warning: If mysqld dies during a REPAIR TABLE,
it's essential that you do at once another REPAIR on the table
before executing any other commands on it. (It's of course always good
to start with a backup). In the worst case you can have a new clean
index file without information about the datafile and when the next
command you do may overwrite the datafile. This is not a likely, but
possible scenario.
Strictly before MySQL 4.1.1, REPAIR commands are not written
to the binary log. Since MySQL 4.1.1 they are written to the binary
log unless the optional NO_WRITE_TO_BINLOG keyword
(or its alias LOCAL) was used.
| Posted by Linda Wright on Friday May 17 2002, @6:24am | [Delete] [Edit] |
MySQL Berkley tables cannot be repaired using
REPAIR TABLE. However, after a BIG hardware
crash, I was able to recover data that I thought
had been lost by;
1) Shutting down all clients
2) Reloading the database (using mysqladmin
reload) then 3) Shutting down and restarting the
mySQL server.
I am truly amazed. :)) Well done guys!
| Posted by [name withheld] on Tuesday May 13 2003, @10:16am | [Delete] [Edit] |
I recently had a table crash. All the data (400K of carefully picked up data like monument descriptions, timetables, addresses, phones and so on) vanished in the air.
Of course I should have made regular backups. Sometimes I do. Generally I make a routine to do it for me while I sleep. But I didn't this once.
I was advised to drop the crashed table and reload it again. However, I thought that could be a little too radical to start with.
So I came to mysql.com, and the only suggestion only was: use REPAIR TABLE <tablename>
So I did. I wrote a small php script:
mysql_connect(your data)
$query="repair table monuments";
$res=mysql_query($query);
echo $res;
I ran the script and got an OK page.
At first I thought it was too quick, too easy, but then I went to see and yes, the table was there, in all its glory There's probably a corrupt record somewhere, but I didn't find it yet.
Hope this helps someone...
| Posted by [name withheld] on Wednesday June 25 2003, @2:54pm | [Delete] [Edit] |
No it did not help anyone. You did not say anything that has not already been said.