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