#At file:///home/ram/mysql/b37527.5.0/
2666 Ramil Kalimullin 2008-08-18
Fix for bug#37527: mysqlcheck fails to report entire database
when InnoDB frm file corruption
Problem: mysqlcheck runs 'SHOW FULL TABLE' queries to get table lists.
The query may fail for some reasons (e.g. null .frm file) then
mysqlcheck doesn't process the database tables.
Fix: try to run 'SHOW TABLES' if 'SHOW FULL TABLES' failed.
modified:
client/mysqlcheck.c
mysql-test/r/mysqlcheck.result
mysql-test/t/mysqlcheck.test
per-file messages:
client/mysqlcheck.c
Fix for bug#37527: mysqlcheck fails to report entire database
when InnoDB frm file corruption
- run "SHOW TABLES" query if "SHOW /*!50002 FULL*/ TABLES" failed;
- print error info if both failed.
mysql-test/r/mysqlcheck.result
Fix for bug#37527: mysqlcheck fails to report entire database
when InnoDB frm file corruption
- test result.
mysql-test/t/mysqlcheck.test
Fix for bug#37527: mysqlcheck fails to report entire database
when InnoDB frm file corruption
- test case.
=== modified file 'client/mysqlcheck.c'
--- a/client/mysqlcheck.c 2008-01-23 16:37:46 +0000
+++ b/client/mysqlcheck.c 2008-08-18 07:29:34 +0000
@@ -488,9 +488,14 @@ static int process_all_tables_in_db(char
LINT_INIT(res);
if (use_db(database))
return 1;
- if (mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") ||
- !((res= mysql_store_result(sock))))
+ if ((mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") &&
+ mysql_query(sock, "SHOW TABLES")) ||
+ !(res= mysql_store_result(sock)))
+ {
+ my_printf_error(0, "Error: Couldn't get table list for database %s: %s",
+ MYF(0), database, mysql_error(sock));
return 1;
+ }
num_columns= mysql_num_fields(res);
=== modified file 'mysql-test/r/mysqlcheck.result'
--- a/mysql-test/r/mysqlcheck.result 2008-01-27 21:28:50 +0000
+++ b/mysql-test/r/mysqlcheck.result 2008-08-18 07:29:34 +0000
@@ -57,4 +57,11 @@ drop view v_bug25347;
drop table t_bug25347;
drop database d_bug25347;
use test;
+CREATE TABLE t1(a INT);
+CREATE TABLE t2(a INT);
+test.t1
+Error : Incorrect information in file: './test/t1.frm'
+error : Corrupt
+test.t2 OK
+DROP TABLE t1, t2;
End of 5.0 tests
=== modified file 'mysql-test/t/mysqlcheck.test'
--- a/mysql-test/t/mysqlcheck.test 2008-01-27 21:28:50 +0000
+++ b/mysql-test/t/mysqlcheck.test 2008-08-18 07:29:34 +0000
@@ -58,4 +58,22 @@ drop table t_bug25347;
drop database d_bug25347;
use test;
+#
+# Bug#37527: mysqlcheck fails to report entire database
+# when frm file corruption
+#
+CREATE TABLE t1(a INT);
+CREATE TABLE t2(a INT);
+# backup then null t1.frm
+--copy_file $MYSQLTEST_VARDIR/master-data/test/t1.frm
$MYSQLTEST_VARDIR/master-data/test/t1.frm.bak
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm
+--write_file $MYSQLTEST_VARDIR/master-data/test/t1.frm
+EOF
+--exec $MYSQL_CHECK test
+# restore t1.frm
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm
+--copy_file $MYSQLTEST_VARDIR/master-data/test/t1.frm.bak
$MYSQLTEST_VARDIR/master-data/test/t1.frm
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm.bak
+DROP TABLE t1, t2;
+
--echo End of 5.0 tests
| Thread |
|---|
| • bzr commit into mysql-5.0 branch (ramil:2666) Bug#37527 | Ramil Kalimullin | 18 Aug |