MySQL 5.1 / MariaDB 5.5临时表行为改变

时间:2015-04-20 19:30:10

标签: mysql mariadb

在测试从MySQL 5.1到MariaDB 5.5的升级时,我遇到了以下行为变化。

请注意,在两种情况下,这都是在root(只读)服务器上使用具有alter table权限的非root用户。

MySQl 5.1:

mysql> create temporary table testtest (id int);
Query OK, 0 rows affected (0.00 sec)

mysql> ALTER TABLE `testtest` ADD PRIMARY KEY(`id`);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB 5.5:

MariaDB [pollstream_common]> create temporary table testtest (id int);
Query OK, 0 rows affected (0.20 sec)

MariaDB [pollstream_common]> ALTER TABLE `testtest` ADD PRIMARY KEY(`id`);
ERROR 1290 (HY000): The MariaDB server is running with the --read-only option so it cannot execute this statement

有没有人知道这种行为改变是设计还是两种方式,如果可能有解决方法?因为改变和测试使用前一版本实现并且已经工作了一段时间的现有代码是一项相当大的工作。

提前致谢!

2 个答案:

答案 0 :(得分:0)

create temporary table testtest (id int, PRIMARY KEY(`id`));

避免这个问题。

为什么只读取?也许这是一个奴隶?或者是双主,单作家设置的主人?我不会在不了解原因的情况下关闭read_only - 默认情况下它不会启用。

底层MySQL bug(可能导致MariaDB错误)表明binlog_format = ROW可能是一个解决方案。

答案 1 :(得分:0)

这个问题非常棘手。我们发现,如果引擎是innodb(!),它只会 ,这是MariaDB的默认类型(或至少它是在Centos 7中)。

一旦我们在my.cnf中设置了default-storage-engine = myisam,问题就消失了。我怀疑它是一个错误,而不是预期的行为,但这就是它的修复方式。