Server IP : 104.21.38.3 / Your IP : 162.158.170.80 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/mysql-test/suite/innodb_fts/r/ |
Upload File : |
# Bug #18285007 COPY OF TABLES WITH INNODB FTS # FROM WINDOWS TO LINUX CAUSES CRASH # Simulating old non-windows(< 5.6.16) data directory SET GLOBAL DEBUG='+d,innodb_test_wrong_fts_aux_table_name'; CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a, b))engine=innodb; INSERT INTO t1 VALUES('TEST1', 'TEST2'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b TEST1 TEST2 SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_INDEX_1 FTS_0 test/FTS_AUX_INDEX_2 FTS_0 test/FTS_AUX_INDEX_3 FTS_0 test/FTS_AUX_INDEX_4 FTS_0 test/FTS_AUX_INDEX_5 FTS_0 test/FTS_AUX_INDEX_6 FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE # restart SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b TEST1 TEST2 SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_INDEX_1 FTS_0 test/FTS_AUX_INDEX_2 FTS_0 test/FTS_AUX_INDEX_3 FTS_0 test/FTS_AUX_INDEX_4 FTS_0 test/FTS_AUX_INDEX_5 FTS_0 test/FTS_AUX_INDEX_6 FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE DROP TABLE t1; # Simulating old windows (< 5.6.16) data directory SET GLOBAL DEBUG='+d,innodb_test_wrong_fts_aux_table_name'; SET GLOBAL DEBUG='+d,innodb_test_wrong_windows_fts_aux_table_name'; CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a, b))engine=innodb; INSERT INTO t1 VALUES('TEST1', 'TEST2'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b TEST1 TEST2 SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_INDEX_1 FTS_0 test/FTS_AUX_INDEX_2 FTS_0 test/FTS_AUX_INDEX_3 FTS_0 test/FTS_AUX_INDEX_4 FTS_0 test/FTS_AUX_INDEX_5 FTS_0 test/FTS_AUX_INDEX_6 FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE # restart SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b TEST1 TEST2 SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_INDEX_1 FTS_0 test/FTS_AUX_INDEX_2 FTS_0 test/FTS_AUX_INDEX_3 FTS_0 test/FTS_AUX_INDEX_4 FTS_0 test/FTS_AUX_INDEX_5 FTS_0 test/FTS_AUX_INDEX_6 FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE DROP TABLE t1; # Simulation current non windows data directory CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a, b))engine=innodb; INSERT INTO t1 VALUES('TEST1', 'TEST2'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b TEST1 TEST2 SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_INDEX_1 FTS_0 test/FTS_AUX_INDEX_2 FTS_0 test/FTS_AUX_INDEX_3 FTS_0 test/FTS_AUX_INDEX_4 FTS_0 test/FTS_AUX_INDEX_5 FTS_0 test/FTS_AUX_INDEX_6 FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE # restart SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b TEST1 TEST2 SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_INDEX_1 FTS_0 test/FTS_AUX_INDEX_2 FTS_0 test/FTS_AUX_INDEX_3 FTS_0 test/FTS_AUX_INDEX_4 FTS_0 test/FTS_AUX_INDEX_5 FTS_0 test/FTS_AUX_INDEX_6 FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE DROP TABLE t1; # Non windows aux table flag failure and rebuild the corrupted index. # restart call mtr.add_suppression("\\[Warning\\] InnoDB: Parent table of FTS auxiliary table .* not found."); call mtr.add_suppression("\\[Warning\\] InnoDB: Setting aux table .* to hex format failed."); call mtr.add_suppression("\\[ERROR\\] InnoDB: Index .* of table .* is corrupted"); SET GLOBAL DEBUG='+d,innodb_test_wrong_fts_aux_table_name'; CREATE TABLE t1(a TEXT, b TEXT, c TEXT, FULLTEXT `AB` (a, b), FULLTEXT `C1` (c)); INSERT INTO t1 VALUES('TEST1', 'TEST2', 'TEXT3'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2', 'TEXT5'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); a b c TEXT1 TEXT2 TEXT5 # restart: --debug=d,aux_table_flag_fail SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); ERROR HY000: The table does not have FULLTEXT index to support this query SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); ERROR HY000: The table does not have FULLTEXT index to support this query CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check Warning InnoDB: Index AB is marked as corrupted test.t1 check Warning InnoDB: Index C1 is marked as corrupted test.t1 check error Corrupt ALTER TABLE t1 ADD FULLTEXT(b); ERROR HY000: Index corrupt: Fulltext index 'AB' is corrupt. you should drop this index first. # restart SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); ERROR HY000: The table does not have FULLTEXT index to support this query SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); ERROR HY000: The table does not have FULLTEXT index to support this query # Drop the corrupted index. ALTER TABLE t1 DROP INDEX `AB`; ALTER TABLE t1 DROP INDEX `C1`; # Rebuild the index. ALTER TABLE t1 ADD FULLTEXT(a, b); ALTER TABLE t1 ADD FULLTEXT(c); # Read the record using fts index. SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); a b c TEXT1 TEXT2 TEXT5 DROP TABLE t1; # Non windows parent table flag failure. SET GLOBAL DEBUG='+d,innodb_test_wrong_fts_aux_table_name'; CREATE TABLE t1(a TEXT, b TEXT, c TEXT, FULLTEXT(a, b), FULLTEXT(c)); INSERT INTO t1 VALUES('TEST1', 'TEST2', 'TEXT3'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2', 'TEXT5'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); a b c TEXT1 TEXT2 TEXT5 # restart SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); a b c TEXT1 TEXT2 TEXT5 DROP TABLE t1; # Drop FTS table and rename the common tables. # restart SET GLOBAL DEBUG='+d,innodb_test_wrong_fts_aux_table_name'; SET GLOBAL DEBUG='+d,innodb_test_wrong_windows_fts_aux_table_name'; CREATE TABLE t1(a TEXT, b TEXT, c TEXT, FULLTEXT f1(a, b)); INSERT INTO t1 VALUES('TEST1', 'TEST2', 'TEXT3'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2', 'TEXT5'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 alter table t1 drop index f1; SET SESSION debug='-d,innodb_test_wrong_fts_sys_table_name'; SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE # restart SELECT SUBSTRING(name, LOCATE('_', name) - 3, 5) AS prefix, name FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE name LIKE '%FTS_%' ORDER BY 1, 2; prefix name FTS_0 test/FTS_AUX_BEING_DELETED FTS_0 test/FTS_AUX_BEING_DELETED_CACHE FTS_0 test/FTS_AUX_CONFIG FTS_0 test/FTS_AUX_DELETED FTS_0 test/FTS_AUX_DELETED_CACHE SELECT * FROM t1; a b c TEST1 TEST2 TEXT3 TEXT1 TEXT2 TEXT5 DROP TABLE t1; # Rename failure for old windows data directory and rebuild the # corrupted index call mtr.add_suppression("\\[Warning\\] InnoDB: Failed to rename one aux table .* will revert all successful rename operations."); call mtr.add_suppression("\\[Warning\\] InnoDB: Rollback operations on all aux tables of table .* All the fts index associated with the table are marked as corrupted. Please rebuild the index again."); call mtr.add_suppression("\\[ERROR\\] InnoDB: Flagged corruption of .* in table .* in DROP ORPHANED TABLE"); SET GLOBAL DEBUG='+d,innodb_test_wrong_fts_aux_table_name'; SET GLOBAL DEBUG='+d,innodb_test_wrong_windows_fts_aux_table_name'; CREATE TABLE t1(a TEXT, b TEXT, c TEXT, FULLTEXT `AB`(a, b), FULLTEXT `C1`(c)); INSERT INTO t1 VALUES('TEST1', 'TEST2', 'TEXT3'); INSERT INTO t1 VALUES('TEXT1', 'TEXT2', 'TEXT5'); SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); a b c TEXT1 TEXT2 TEXT5 # restart: --debug=d,rename_aux_table_fail ALTER TABLE t1 ADD FULLTEXT(b); ERROR HY000: Upgrade index name failed, please use create index(alter table) algorithm copy to rebuild index. SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); ERROR HY000: The table does not have FULLTEXT index to support this query # restart SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); ERROR HY000: The table does not have FULLTEXT index to support this query SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); ERROR HY000: The table does not have FULLTEXT index to support this query # Drop the corrupted index. ALTER TABLE t1 DROP INDEX `AB`; ALTER TABLE t1 DROP INDEX `C1`; # Rebuild the index. ALTER TABLE t1 ADD FULLTEXT(a, b); ALTER TABLE t1 ADD FULLTEXT(c); # Read the record using fts index. SELECT * FROM t1 WHERE MATCH(a, b) AGAINST ('TEST2'); a b c TEST1 TEST2 TEXT3 SELECT * FROM t1 WHERE MATCH(c) AGAINST ('TEXT5'); a b c TEXT1 TEXT2 TEXT5 TRUNCATE TABLE t1; DROP TABLE t1; # restart