mirror of
https://github.com/MariaDB/server.git
synced 2025-09-11 05:52:26 +03:00
Problem was that in-place online alter table was used on a table that had mismatch between MySQL frm file and InnoDB data dictionary. Fixed so that traditional "Copy" method is used if the MySQL frm and InnoDB data dictionary is not consistent.
50 lines
1.8 KiB
Plaintext
50 lines
1.8 KiB
Plaintext
call mtr.add_suppression("Table .* has a primary key in InnoDB data dictionary, but not in MySQL.*");
|
|
call mtr.add_suppression("InnoDB: Table .* contains .* indexes inside InnoDB, which is different from the number of indexes .* defined in the MySQL.*");
|
|
create table t1 (pk int, i int, key(i)) engine=InnoDB;
|
|
insert into t1 values (1,1),(2,2);
|
|
flush tables;
|
|
# Save the .frm file without the PK
|
|
alter table t1 add primary key (pk);
|
|
# Stop the server, replace the frm with the old one and restart the server
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`pk` int(11) DEFAULT NULL,
|
|
`i` int(11) DEFAULT NULL,
|
|
KEY `i` (`i`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
Warnings:
|
|
Warning 1082 InnoDB: Table test/t1 has a primary key in InnoDB data dictionary, but not in MySQL!
|
|
Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
|
|
select * from t1;
|
|
pk i
|
|
1 1
|
|
2 2
|
|
alter table t1 add j int;
|
|
Warnings:
|
|
Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
|
|
show warnings;
|
|
Level Code Message
|
|
Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MySQL
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`pk` int(11) DEFAULT NULL,
|
|
`i` int(11) DEFAULT NULL,
|
|
`j` int(11) DEFAULT NULL,
|
|
KEY `i` (`i`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
alter table t1 add primary key (pk);
|
|
show warnings;
|
|
Level Code Message
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`pk` int(11) NOT NULL DEFAULT '0',
|
|
`i` int(11) DEFAULT NULL,
|
|
`j` int(11) DEFAULT NULL,
|
|
PRIMARY KEY (`pk`),
|
|
KEY `i` (`i`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
|
drop table t1;
|