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.
This commit is contained in:
parent
f88fd3feb7
commit
e0d5a6c15f
@ -488,9 +488,14 @@ static int process_all_tables_in_db(char *database)
|
||||
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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -65,4 +65,24 @@ create view v1 as select * from information_schema.routines;
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user