Bug #76154 crash of server during repair table1 , table2 quick
Submitted: 4 Mar 2015 21:29 Modified: 20 Mar 2015 9:42
Reporter: Matthias Leich Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Partitions Severity:S3 (Non-critical)
Version:5.7.7-rc-debug-log OS:Any
Assigned to: CPU Architecture:Any

[4 Mar 2015 21:29] Matthias Leich
Description:
MySQL-5.7 compiled with debug
git log -n 1
commit 6a258298b478784cbdc0e6fdda603981d86bc067
...
Date:   Mon Mar 2 15:43:53 2015 +0100

CREATE TABLE test . p7 ENGINE = InnoDB PARTITION BY KEY (pk) AS
SELECT 1 AS pk;
CREATE TABLE p8 (col1 INT) ENGINE = InnoDB;
REPAIR TABLE test . p7 , test . p8 QUICK;
# REPAIR TABLE test . p7 , test . p8;

#3  <signal handler called>
#4  raise () from /lib64/libc.so.6 
#5  abort () from /lib64/libc.so.6 
#6  DbugExit (why=0x7fa94006b350 "missing DBUG_RETURN or DBUG_VOID_RETURN macro in function \"ha_innopart::repair\"\n")
    at dbug/dbug.c:2228
#7  _db_return_ (_line_=1029, _stack_frame_=0x7fa94006b5a0) 
    at dbug/dbug.c:1291
#8  mysql_admin_table(THD *, TABLE_LIST *, HA_CHECK_OPT *, const char *, thr_lock_type, bool, bool, uint, int (*)(THD *, TABLE_LIST *, HA_CHECK_OPT *), struct {...}, int (*)(THD *, TABLE_LIST *)) (thd=0x7fa8f8011fe0, tables=0x7fa8f80eacd0, check_opt=0x7fa8f8014528, operator_name=0x1bc2955 "repair", lock_type=TL_WRITE, open_for_modify=false, repair_table_use_frm=false, extra_open_options=32, prepare_func=0x13881e1 <prepare_for_repair(THD*, TABLE_LIST*, HA_CHECK_OPT*)>, operator_func=(int (handler::*)(handler * const, THD *, HA_CHECK_OPT *)) 0xcd5bde <handler::ha_repair(THD*, st_ha_check_opt*)>, view_operator_func=0x0) 
    at sql/sql_admin.cc:1029
#9  Sql_cmd_repair_table::execute (this=0x7fa8f80eb800, thd=0x7fa8f8011fe0) 
    at sql/sql_admin.cc:1217
#10 mysql_execute_command (thd=0x7fa8f8011fe0) 
    at sql/sql_parse.cc:4477
#11 mysql_parse (thd=0x7fa8f8011fe0, parser_state=0x7fa94006de40) 
    at sql/sql_parse.cc:5154
#12 dispatch_command (command=COM_QUERY, thd=0x7fa8f8011fe0, packet=0x7fa8f8007781 "", packet_length=40) 
    at sql/sql_parse.cc:1249
#13 do_command (thd=0x7fa8f8011fe0) 
    at sql/sql_parse.cc:835
#14 handle_connection (arg=0x3b72e30) 
    at sql/conn_handler/connection_handler_per_thread.cc:298
#15 pfs_spawn_thread (arg=0x3c1c3f0) 
    at storage/perfschema/pfs.cc:2147
#16 start_thread () from /lib64/libpthread.so.0

In case the last statement is modified towards
   REPAIR TABLE test . p7 , test . p8;
than we get
   REPAIR TABLE test . p7 , test . p8;
   Table  Op      Msg_type        Msg_text
   test.p7        repair  status  OK
   test.p8        repair  note    The storage engine for the table doesn't support repair  

Result for the same test in MySQL 5.6.24 compiled with debug:
   REPAIR TABLE test . p7 , test . p8 QUICK;
   Table  Op      Msg_type        Msg_text
   test.p7        repair  note    The storage engine for the table doesn't support repair
   test.p8        repair  note    The storage engine for the table doesn't support repair

Per manual for mysql-5.7
   http://dev.mysql.com/doc/refman/5.7/en/repair-table.html
...
REPAIR TABLE only applies to MyISAM, ARCHIVE, and CSV tables. See Section 15.2,
“The MyISAM Storage Engine”, and Section 15.5, “The ARCHIVE Storage Engine”,
and Section 15.4, “The CSV Storage Engine”.
...
If you use the QUICK option, REPAIR TABLE tries to repair only the index file,
and not the data file. This type of repair is like that done by
myisamchk --recover --quick. 

How to repeat:
See above
[20 Mar 2015 9:42] Jon Stephens
Documented fix in the 5.7.8 changelog as follows:

    REPAIR TABLE ... QUICK could fail when used with multiple
    partitioned tables.
      
Closed.