I hope it's not tacky to reply to my own post. :)
This is a script I run daily on our database... Seems to work quite well.
// CHECK FOR CORRUPTED TABLES
// get names of all tables
$query = "SHOW TABLES";
$result = mysql_query($query) or trigger_error("\nMySQL said:
".mysql_error(), E_USER_ERROR);
$tableNames = array();
while($row = mysql_fetch_array($result,MYSQL_NUM)) {
$tableNames[] = $row[0];
}
// check all tables
$query = "CHECK TABLE ".implode(',',$tableNames);
$result = mysql_query($query) or trigger_error("\nMySQL said:
".mysql_error(), E_USER_ERROR);
$messageArray = array();
// if any tables are not 'OK', add to an array.
while($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
if($row['Msg_text'] != 'OK') {
$messageArray[] = $row;
}
}
if(count($messageArray) > 0) {
$message = "MySQL Status Information :
Table\t\tOp\t\tMsg_type\t\tMsg_text
";
foreach($messageArray as $value) {
$message .= implode("\t",$value)."\n";
}
mail('techsupport@resultsnow.com',"MySQL Table
Maintainence",$message);
}
Now that I look at it, I see this script isn't locking tables before
running the 'check tables' statement either, so maybe I was off-base in
my last post. Sorry, just trying to remember this stuff from a MySQL
training session I went to about a year ago. I run into corrupted
tables so rarely I'm foggy on the details. Still, hope this helps.
regards,
alex
Alex Dean wrote:
> There might not be anything wrong at all. I believe you may often get
> this error if clients are currently using the tables. That's the way
> it was with the older 'myisamchk' program (for MySQL 3.23.xx), because
> it worked directly on the data files rather than going through the
> database server. 'mysqlcheck' (for MySQL 4.0.x+), I think, does go
> through the server, but you still might get this error if you're not
> locking tables before doing the check.
>
> From the mysql client, you can try locking all the tables you want to
> check, querying 'CHECK TABLE tablename', then release your locks.
>
> Anyway... 'REPAIR TABLE tablename' is the way to go if you have this
> problem, but I bet it's probably nothing...
>
> Here's some table maintainence/recover info for 'myisamchk'.
> http://dev.mysql.com/doc/mysql/en/Table_maintenance.html I believe
> there are links there to other recovery topics related to mysql.
>
> regards,
> alex
>
> Brock wrote:
>
>> Look at the mysql docs for the "REPAIR TABLE tablenmae" query. There are
>> some other options you can give it to have it rebuild indexes and such.
>>
>> Sorry, link not handy.
>>
>> --Brock
>>
>> On 2004.10.21.08.59, Miles Beck wrote:
>> | | | WARNING: mysqlcheck has found corrupt tables
>> | | The table is listed and then this is displayed.
>> | | "warning: 13 clients are using or haven't closed the table properly"
>> | | This occurs for 19 tables in a database I have running.
>> | | How do tables get corrupted and what should I do to fix this?
>> | | Thanks
>> | | -------------------------------------------------
>> | FastQ Communications | Providing Innovative Internet Solutions
>> Since 1993
>> | | ---------------------------------------------------
>> | PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us
>> | To subscribe, unsubscribe, or to change you mail settings:
>> | http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>> ---------------------------------------------------
>> PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us
>> To subscribe, unsubscribe, or to change you mail settings:
>> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>>
>>
>>
>
> ---------------------------------------------------
> PLUG-discuss mailing list - PLUG-discuss@lists.plug.phoenix.az.us
> To subscribe, unsubscribe, or to change you mail settings:
> http://lists.PLUG.phoenix.az.us/mailman/listinfo/plug-discuss
>