List:Commits« Previous MessageNext Message »
From:Ramil Kalimullin Date:November 14 2008 7:40am
Subject:bzr commit into mysql-5.0-bugteam branch (ramil:2714) Bug#37527
View as plain text  
#At file:///home/ram/mysql/mysql-5.0-bugteam/

 2714 Ramil Kalimullin	2008-11-14
      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-11-14 07:40:46 +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-11-13 13:06:48 +0000
+++ b/mysql-test/r/mysqlcheck.result	2008-11-14 07:40:46 +0000
@@ -63,4 +63,11 @@ Table	Op	Msg_type	Msg_text
 test.v1	check	status	OK
 information_schema.routines	check	note	The storage engine for the table doesn't support check
 drop view v1;
+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-11-13 13:06:48 +0000
+++ b/mysql-test/t/mysqlcheck.test	2008-11-14 07:40:46 +0000
@@ -65,4 +65,24 @@ create view v1 as select * from informat
 check table v1, information_schema.routines;
 drop view v1;
 
+
+#
+# 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-bugteam branch (ramil:2714) Bug#37527Ramil Kalimullin14 Nov