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);
|
LINT_INIT(res);
|
||||||
if (use_db(database))
|
if (use_db(database))
|
||||||
return 1;
|
return 1;
|
||||||
if (mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") ||
|
if ((mysql_query(sock, "SHOW /*!50002 FULL*/ TABLES") &&
|
||||||
!((res= mysql_store_result(sock))))
|
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;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
num_columns= mysql_num_fields(res);
|
num_columns= mysql_num_fields(res);
|
||||||
|
|
||||||
|
@ -63,4 +63,11 @@ Table Op Msg_type Msg_text
|
|||||||
test.v1 check status OK
|
test.v1 check status OK
|
||||||
information_schema.routines check note The storage engine for the table doesn't support check
|
information_schema.routines check note The storage engine for the table doesn't support check
|
||||||
drop view v1;
|
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
|
End of 5.0 tests
|
||||||
|
@ -65,4 +65,24 @@ create view v1 as select * from information_schema.routines;
|
|||||||
check table v1, information_schema.routines;
|
check table v1, information_schema.routines;
|
||||||
drop view v1;
|
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
|
--echo End of 5.0 tests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user