call mtr.add_suppression("Table .* has a primary key in InnoDB data dictionary, but not in MariaDB"); call mtr.add_suppression("InnoDB: Table .* contains .* indexes inside InnoDB"); 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 MariaDB! Warning 1082 InnoDB: Table test/t1 contains 2 indexes inside InnoDB, which is different from the number of indexes 1 defined in the MariaDB 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 MariaDB 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 MariaDB 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, `i` int(11) DEFAULT NULL, `j` int(11) DEFAULT NULL, PRIMARY KEY (`pk`), KEY `i` (`i`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 drop table t1;