Bug #80625 InnoDB: Failing assertion: table->data_dir_path while dropping table

Submitted: 6 Mar 2016 9:26 Modified: 8 Mar 2016 13:06
Reporter: Shahriyar Rzayev Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S1 (Critical)
Version:5.6.29 OS:Any
Assigned to: CPU Architecture:Any

[6 Mar 2016 9:26] Shahriyar Rzayev
Description:
Hi dear all,
Here is the reproduce path:

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> CREATE TABLE `t2` (   `c1` int(11) NOT NULL,   PRIMARY KEY (`c1`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 data directory='/tmp/foo';
Query OK, 0 rows affected (0,33 sec)

mysql> insert into t2 values(1);
Query OK, 1 row affected (0,06 sec)

mysql> insert into t2 values(2);
Query OK, 1 row affected (0,06 sec)

Normal shutdown:

root@shrzayev:~# service mysql stop
......
 * MySQL Community Server 5.6.29 is stopped

Moving t2.ibd file from /tmp/foo/test to /var/lib/mysql/test and removing original path:

root@shrzayev:/tmp/foo/test# mv t2.ibd /var/lib/mysql/test/
root@shrzayev:/var/lib/mysql/test# ls -l
total 224
-rw-r----- 1 mysql mysql    65 Mar  5 22:17 db.opt
-rw-rw---- 1 mysql mysql  8556 Mar  5 22:50 t1.frm
-rw-r----- 1 mysql mysql 98304 Mar  5 22:52 t1.ibd
-rw-rw---- 1 mysql mysql  8556 Mar  6 13:09 t2.frm
-rw-rw---- 1 mysql mysql 98304 Mar  6 13:09 t2.ibd
-rw-rw---- 1 mysql mysql    20 Mar  6 13:09 t2.isl

root@shrzayev:/var/lib/mysql/test# cat t2.isl 
/tmp/foo/test/t2.ibd

root@shrzayev:/tmp# rm -rf foo/

Starting MySQL:

2016-03-06 13:14:26 7f0698b15780  InnoDB: Operating system error number 2 in a file operation.
InnoDB: The error means the system cannot find the path specified.
InnoDB: If you are installing InnoDB, remember that you must create
InnoDB: directories yourself, InnoDB does not create them.
2016-03-06 13:14:26 8751 [ERROR] InnoDB: A link file was found named './test/t2.isl' but the linked tablespace '/tmp/foo/test/t2.ibd' could not be opened.
2016-03-06 13:14:26 8751 [Note] InnoDB: The InnoDB data dictionary table SYS_DATAFILES for tablespace ID 15 was updated to use file ./test/t2.ibd.

So it seems that, changes are reflected as shown in error log and in fact we can access table:

mysql> select * from t2;
+----+
| c1 |
+----+
|  1 |
|  2 |
+----+
2 rows in set (0,00 sec)

But if you try to drop table:

mysql> drop table t2;
ERROR 2013 (HY000): Lost connection to MySQL server during query

From error log:

2016-03-06 13:17:22 7f02307d3700  InnoDB: Assertion failure in thread 139647380174592 in file row0mysql.cc line 4202
InnoDB: Failing assertion: table->data_dir_path
/usr/sbin/mysqld[0x9cdebe]
/usr/sbin/mysqld[0x936b83]
/usr/sbin/mysqld(_Z15ha_delete_tableP3THDP10handlertonPKcS4_S4_b+0xb4)[0x5b9194]
/usr/sbin/mysqld(_Z23mysql_rm_table_no_locksP3THDP10TABLE_LISTbbbb+0x4ed)[0x73df0d]
/usr/sbin/mysqld(_Z14mysql_rm_tableP3THDP10TABLE_LISTcc+0x11f)[0x73f0df]
/usr/sbin/mysqld(_Z21mysql_execute_commandP3THD+0x3139)[0x6ed559]
/usr/sbin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x368)[0x6f0c08]
/usr/sbin/mysqld(_Z16dispatch_command19enum_server_commandP3THDPcj+0x100f)[0x6f23af]
/usr/sbin/mysqld(_Z24do_handle_one_connectionP3THD+0x142)[0x6bfba2]
/usr/sbin/mysqld(handle_one_connection+0x40)[0x6bfc50]
/usr/sbin/mysqld(pfs_spawn_thread+0x143)[0x915273]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x8182)[0x7f0244a47182]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7f0243f5447d]

From core dump:

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/'.
Program terminated with signal SIGABRT, Aborted.
#0  0x00007f0697caf621 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:61
61	../nptl/sysdeps/unix/sysv/linux/pthread_kill.c: No such file or directory.
Traceback (most recent call last):
  File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
    from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
(gdb) bt
#0  0x00007f0697caf621 in __pthread_kill (threadid=<optimized out>, signo=6) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:61
#1  0x000000000067062d in handle_fatal_signal ()
#2  <signal handler called>
#3  0x00007f06970f3cc9 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56
#4  0x00007f06970f70d8 in __GI_abort () at abort.c:89
#5  0x00000000009cdebe in ?? ()
#6  0x0000000000936b83 in ?? ()
#7  0x00000000005b9194 in ha_delete_table(THD*, handlerton*, char const*, char const*, char const*, bool) ()
#8  0x000000000073df0d in mysql_rm_table_no_locks(THD*, TABLE_LIST*, bool, bool, bool, bool) ()
#9  0x000000000073f0df in mysql_rm_table(THD*, TABLE_LIST*, char, char) ()
#10 0x00000000006ed559 in mysql_execute_command(THD*) ()
#11 0x00000000006f0c08 in mysql_parse(THD*, char*, unsigned int, Parser_state*) ()
#12 0x00000000006f23af in dispatch_command(enum_server_command, THD*, char*, unsigned int) ()
#13 0x00000000006bfba2 in do_handle_one_connection(THD*) ()
#14 0x00000000006bfc50 in handle_one_connection ()
#15 0x0000000000915273 in pfs_spawn_thread ()
#16 0x00007f0697caa182 in start_thread (arg=0x7f0683a36700) at pthread_create.c:312
#17 0x00007f06971b747d in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:111

How to repeat:
See description.

Suggested fix:
Maybe such operation is not allowed. If so it should  be indicated clearly.
From error log it is clear that the new tablespace path is updated. So it is a quite true action.
[6 Mar 2016 10:17] Shahriyar Rzayev
Changed OS -> to ANY
[8 Mar 2016 13:06] MySQL Verification Team
Hello Shahriyar,

Thank you for the report.

Thanks,
Umesh

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.041 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.