-
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.
commit ef92aaf Author: Jan Lindström <jan.lindstrom@mariadb.com> Date: Wed Jun 22 22:37:28 2016 +0300 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
e167806
commit 26de906
Showing
16 changed files
with
272 additions
and
42 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,89 @@ | ||
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 "Foreign key constraint is incorrectly formed") | ||
show warnings; | ||
Level Code Message | ||
Error 1005 Can't create table `bug_fk`.`b` (errno: 150 "Foreign key constraint is incorrectly formed") | ||
Warning 1215 Cannot add foreign key constraint | ||
DROP TABLE IF EXISTS d; | ||
Warnings: | ||
Note 1051 Unknown table 'bug_fk.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 "Foreign key constraint is incorrectly formed") | ||
show warnings; | ||
Level Code Message | ||
Error 1005 Can't create table `bug_fk`.`b` (errno: 150 "Foreign key constraint is incorrectly formed") | ||
Warning 1215 Cannot add foreign key constraint | ||
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
Oops, something went wrong.