-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-10083: Orphan ibd file when playing with foreign keys
Analysis: row_drop_table_for_mysql did not allow dropping referenced table even in case when actual creating of the referenced table was not successfull if foreign_key_checks=1. Fix: Allow dropping referenced table even if foreign_key_checks=1 if actual table create returned error.
- Loading branch information
Jan Lindström
committed
Jun 23, 2016
1 parent
a482e76
commit ef92aaf
Showing
14 changed files
with
257 additions
and
32 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
set global innodb_file_per_table = 1; | ||
drop table if exists b; | ||
drop database if exists bug_fk; | ||
create database bug_fk; | ||
use bug_fk; | ||
CREATE TABLE b ( | ||
b int unsigned NOT NULL, | ||
d1 datetime NOT NULL, | ||
PRIMARY KEY (b,d1) | ||
) ENGINE=InnoDB; | ||
CREATE TABLE c ( | ||
b int unsigned NOT NULL, | ||
d1 datetime NOT NULL, | ||
d2 datetime NOT NULL, | ||
PRIMARY KEY (b,d1), | ||
CONSTRAINT b_fk FOREIGN KEY (b) REFERENCES b (b) | ||
) ENGINE=InnoDB; | ||
show warnings; | ||
Level Code Message | ||
set foreign_key_checks = 0; | ||
DROP TABLE IF EXISTS b; | ||
show create table c; | ||
Table Create Table | ||
c CREATE TABLE `c` ( | ||
`b` int(10) unsigned NOT NULL, | ||
`d1` datetime NOT NULL, | ||
`d2` datetime NOT NULL, | ||
PRIMARY KEY (`b`,`d1`), | ||
CONSTRAINT `b_fk` FOREIGN KEY (`b`) REFERENCES `b` (`b`) | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | ||
CREATE TABLE b ( | ||
b bigint unsigned NOT NULL, | ||
d1 date NOT NULL, | ||
PRIMARY KEY (b,d1) | ||
) ENGINE=InnoDB; | ||
ERROR HY000: Can't create table 'bug_fk.b' (errno: 150) | ||
show warnings; | ||
Level Code Message | ||
Error 1005 Can't create table 'bug_fk.b' (errno: 150) | ||
DROP TABLE IF EXISTS d; | ||
Warnings: | ||
Note 1051 Unknown table 'd' | ||
CREATE TABLE d ( | ||
b bigint unsigned NOT NULL, | ||
d1 date NOT NULL, | ||
PRIMARY KEY (b,d1), | ||
CONSTRAINT bd_fk FOREIGN KEY (b) REFERENCES b (b) | ||
) ENGINE=InnoDB; | ||
show warnings; | ||
Level Code Message | ||
set foreign_key_checks = 1; | ||
show create table c; | ||
Table Create Table | ||
c CREATE TABLE `c` ( | ||
`b` int(10) unsigned NOT NULL, | ||
`d1` datetime NOT NULL, | ||
`d2` datetime NOT NULL, | ||
PRIMARY KEY (`b`,`d1`), | ||
CONSTRAINT `b_fk` FOREIGN KEY (`b`) REFERENCES `b` (`b`) | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | ||
show create table d; | ||
Table Create Table | ||
d CREATE TABLE `d` ( | ||
`b` bigint(20) unsigned NOT NULL, | ||
`d1` date NOT NULL, | ||
PRIMARY KEY (`b`,`d1`), | ||
CONSTRAINT `bd_fk` FOREIGN KEY (`b`) REFERENCES `b` (`b`) | ||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 | ||
CREATE TABLE b ( | ||
b bigint unsigned NOT NULL, | ||
d1 date NOT NULL, | ||
PRIMARY KEY (b,d1) | ||
) ENGINE=InnoDB; | ||
ERROR HY000: Can't create table 'bug_fk.b' (errno: 150) | ||
show warnings; | ||
Level Code Message | ||
Error 1005 Can't create table 'bug_fk.b' (errno: 150) | ||
set foreign_key_checks=0; | ||
drop table c; | ||
drop table d; | ||
create table b(id int) engine=innodb; | ||
show warnings; | ||
Level Code Message | ||
b.frm | ||
b.ibd | ||
drop table if exists b; | ||
drop database if exists bug_fk; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
--source include/have_innodb.inc | ||
|
||
# | ||
# MDEV-10083: Orphan ibd file when playing with foreign keys | ||
# | ||
--disable_query_log | ||
SET @start_global_fpt = @@global.innodb_file_per_table; | ||
SET @start_global_fkc = @@global.foreign_key_checks; | ||
--enable_query_log | ||
|
||
set global innodb_file_per_table = 1; | ||
|
||
--disable_warnings | ||
drop table if exists b; | ||
drop database if exists bug_fk; | ||
--enable_warnings | ||
|
||
let $MYSQLD_DATADIR = `select @@datadir`; | ||
|
||
create database bug_fk; | ||
use bug_fk; | ||
|
||
CREATE TABLE b ( | ||
b int unsigned NOT NULL, | ||
d1 datetime NOT NULL, | ||
PRIMARY KEY (b,d1) | ||
) ENGINE=InnoDB; | ||
|
||
CREATE TABLE c ( | ||
b int unsigned NOT NULL, | ||
d1 datetime NOT NULL, | ||
d2 datetime NOT NULL, | ||
PRIMARY KEY (b,d1), | ||
CONSTRAINT b_fk FOREIGN KEY (b) REFERENCES b (b) | ||
) ENGINE=InnoDB; | ||
|
||
show warnings; | ||
|
||
set foreign_key_checks = 0; | ||
|
||
DROP TABLE IF EXISTS b; | ||
|
||
show create table c; | ||
|
||
# | ||
# Note that column b has different type in parent table | ||
# | ||
--error 1005 | ||
CREATE TABLE b ( | ||
b bigint unsigned NOT NULL, | ||
d1 date NOT NULL, | ||
PRIMARY KEY (b,d1) | ||
) ENGINE=InnoDB; | ||
|
||
show warnings; | ||
|
||
DROP TABLE IF EXISTS d; | ||
|
||
CREATE TABLE d ( | ||
b bigint unsigned NOT NULL, | ||
d1 date NOT NULL, | ||
PRIMARY KEY (b,d1), | ||
CONSTRAINT bd_fk FOREIGN KEY (b) REFERENCES b (b) | ||
) ENGINE=InnoDB; | ||
|
||
show warnings; | ||
|
||
set foreign_key_checks = 1; | ||
|
||
show create table c; | ||
show create table d; | ||
|
||
# | ||
# Table c column b used on foreign key has different type | ||
# compared referenced column b in table b, but this | ||
# create still produced b.ibd file. This is because | ||
# we row_drop_table_for_mysql was called and referenced | ||
# table is not allowed to be dropped even in case | ||
# when actual create is not successfull. | ||
# | ||
--error 1005 | ||
CREATE TABLE b ( | ||
b bigint unsigned NOT NULL, | ||
d1 date NOT NULL, | ||
PRIMARY KEY (b,d1) | ||
) ENGINE=InnoDB; | ||
|
||
show warnings; | ||
|
||
--list_files $MYSQLD_DATADIR/bug_fk b* | ||
|
||
set foreign_key_checks=0; | ||
|
||
drop table c; | ||
drop table d; | ||
|
||
--list_files $MYSQLD_DATADIR/bug_fk b* | ||
|
||
create table b(id int) engine=innodb; | ||
show warnings; | ||
|
||
--list_files $MYSQLD_DATADIR/bug_fk b* | ||
|
||
# | ||
# Cleanup | ||
# | ||
--disable_query_log | ||
SET @@global.innodb_file_per_table = @start_global_fpt; | ||
SET @@global.foreign_key_checks = @start_global_fkc; | ||
--enable_query_log | ||
|
||
--disable_warnings | ||
drop table if exists b; | ||
drop database if exists bug_fk; | ||
--enable_warnings |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.