Browse Source
MDEV-16594 ALTER DATA DIRECTORY in PARTITIONS of InnoDB storage does nothing silently
MDEV-16594 ALTER DATA DIRECTORY in PARTITIONS of InnoDB storage does nothing silently
InnoDB intentionally (it's a documented behavior) ignores changing of DATA DIRECTORY and INDEX DIRECTORY for partitions. Though we should issue warning when this happens.pull/1387/head
5 changed files with 323 additions and 0 deletions
-
3mysql-test/suite/parts/r/alter_data_directory_innodb.result
-
153mysql-test/suite/parts/r/reorganize_partition_innodb.result
-
100mysql-test/suite/parts/t/reorganize_partition_innodb.test
-
2sql/share/errmsg-utf8.txt
-
65sql/sql_partition.cc
@ -0,0 +1,153 @@ |
|||
# |
|||
# MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir |
|||
# |
|||
CREATE TABLE t ( |
|||
a INT NOT NULL |
|||
) ENGINE=INNODB |
|||
PARTITION BY HASH (a) ( |
|||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB |
|||
); |
|||
INSERT INTO t VALUES (1); |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE; |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL, |
|||
PRIMARY KEY (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY; |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE; |
|||
SET GLOBAL INNODB_FILE_PER_TABLE=OFF; |
|||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE; |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL, |
|||
PRIMARY KEY (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP; |
|||
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO ( |
|||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB |
|||
); |
|||
Warnings: |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL, |
|||
PRIMARY KEY (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO ( |
|||
PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/', |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
); |
|||
Warnings: |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL, |
|||
PRIMARY KEY (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO ( |
|||
PARTITION p1 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB, |
|||
PARTITION p2 INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB |
|||
); |
|||
Warnings: |
|||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL, |
|||
PRIMARY KEY (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY HASH (a) |
|||
(PARTITION p1 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB, |
|||
PARTITION p2 DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here' ENGINE = InnoDB) */ |
|||
DROP TABLE t; |
|||
CREATE TABLE t ( |
|||
a INT NOT NULL |
|||
) ENGINE=INNODB |
|||
PARTITION BY RANGE (a) |
|||
SUBPARTITION BY HASH (a) |
|||
SUBPARTITIONS 2 |
|||
( |
|||
PARTITION p1 VALUES LESS THAN (7) |
|||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
ENGINE = INNODB, |
|||
PARTITION p2 VALUES LESS THAN MAXVALUE |
|||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
ENGINE = INNODB |
|||
); |
|||
Warnings: |
|||
Warning 1618 <INDEX DIRECTORY> option ignored |
|||
Warning 1618 <INDEX DIRECTORY> option ignored |
|||
Warning 1618 <INDEX DIRECTORY> option ignored |
|||
Warning 1618 <INDEX DIRECTORY> option ignored |
|||
ALTER TABLE t |
|||
REORGANIZE PARTITION p1,p2 INTO |
|||
( |
|||
PARTITION p1 VALUES LESS THAN (7) |
|||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
ENGINE = INNODB, |
|||
PARTITION p2 VALUES LESS THAN MAXVALUE |
|||
DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
ENGINE = INNODB |
|||
); |
|||
Warnings: |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <DATA DIRECTORY> option ignored for InnoDB partition |
|||
Warning 1982 <INDEX DIRECTORY> option ignored for InnoDB partition |
|||
SHOW CREATE TABLE t; |
|||
Table Create Table |
|||
t CREATE TABLE `t` ( |
|||
`a` int(11) NOT NULL |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
/*!50100 PARTITION BY RANGE (a) |
|||
SUBPARTITION BY HASH (a) |
|||
SUBPARTITIONS 2 |
|||
(PARTITION p1 VALUES LESS THAN (7) DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = InnoDB, |
|||
PARTITION p2 VALUES LESS THAN MAXVALUE DATA DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' INDEX DIRECTORY = 'MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = InnoDB) */ |
|||
DROP TABLE t; |
|||
@ -0,0 +1,100 @@ |
|||
--source include/have_innodb.inc |
|||
--source include/have_partition.inc |
|||
|
|||
--echo # |
|||
--echo # MDEV-15953 Alter InnoDB Partitioned Table Moves Files (which were originally not in the datadir) to the datadir |
|||
--echo # |
|||
|
|||
mkdir $MYSQLTEST_VARDIR/tmp/partitions_here; |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
eval CREATE TABLE t ( |
|||
a INT NOT NULL |
|||
) ENGINE=INNODB |
|||
PARTITION BY HASH (a) ( |
|||
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB, |
|||
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' ENGINE = INNODB |
|||
); |
|||
INSERT INTO t VALUES (1); |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE; |
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
ALTER TABLE t DROP PRIMARY KEY, ALGORITHM=COPY; |
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
SET @TMP = @@GLOBAL.INNODB_FILE_PER_TABLE; |
|||
SET GLOBAL INNODB_FILE_PER_TABLE=OFF; |
|||
ALTER TABLE t ADD PRIMARY KEY pk(a), ALGORITHM=INPLACE; |
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
SET GLOBAL INNODB_FILE_PER_TABLE=@TMP; |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO ( |
|||
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB, |
|||
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB |
|||
); |
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO ( |
|||
PARTITION p1 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/', |
|||
PARTITION p2 DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
); |
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
eval ALTER TABLE t REORGANIZE PARTITION p1,p2 INTO ( |
|||
PARTITION p1 INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB, |
|||
PARTITION p2 INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' ENGINE = INNODB |
|||
); |
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
|
|||
DROP TABLE t; |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
eval CREATE TABLE t ( |
|||
a INT NOT NULL |
|||
) ENGINE=INNODB |
|||
PARTITION BY RANGE (a) |
|||
SUBPARTITION BY HASH (a) |
|||
SUBPARTITIONS 2 |
|||
( |
|||
PARTITION p1 VALUES LESS THAN (7) |
|||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
ENGINE = INNODB, |
|||
PARTITION p2 VALUES LESS THAN MAXVALUE |
|||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_here/' |
|||
ENGINE = INNODB |
|||
); |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
eval ALTER TABLE t |
|||
REORGANIZE PARTITION p1,p2 INTO |
|||
( |
|||
PARTITION p1 VALUES LESS THAN (7) |
|||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
ENGINE = INNODB, |
|||
PARTITION p2 VALUES LESS THAN MAXVALUE |
|||
DATA DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
INDEX DIRECTORY = '$MYSQLTEST_VARDIR/tmp/partitions_somewhere_else/' |
|||
ENGINE = INNODB |
|||
); |
|||
|
|||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR |
|||
SHOW CREATE TABLE t; |
|||
|
|||
DROP TABLE t; |
|||
|
|||
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here/test; |
|||
rmdir $MYSQLTEST_VARDIR/tmp/partitions_here; |
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue