2015-04-20 28 views
0

在測試從MySQL 5.1升級到MariaDB 5.5時,我遇到了以下行爲變化。MySQL 5.1/MariaDB 5.5臨時錶行爲變化

請注意,在這兩種情況下,這都是在從屬(只讀)服務器上使用具有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 

有誰知道或者該行爲的改變是由設計,無論哪種方式,如果有可能是一個解決辦法爲了它?由於改變和測試使用前一版本執行並存在一段時間的現有代碼將是一項相當大的任務。

在此先感謝!

+0

它看起來像你碰到[這個bug](https://mariadb.atlassian.net/browse/MDEV-6581)。作爲一種解決方法,請通過SET GLOBAL read_only = 0禁用read_only或在my.cnf文件中更改它。 – xathien

回答

0

這個問題非常棘手。我們發現它是只有出現,如果引擎是innodb(!),這是MariaDB的默認類型(或至少它是在Centos 7中)。

一旦我們在my.cnf中設置了default-storage-engine = myisam,問題就消失了。我懷疑這是一個錯誤,而不是預期的行爲,但這是如何修復的。

+0

5.7正在修改InnoDB中臨時表的處理。我們可能不得不等待那個版本的'真正'修復。 –

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

避免了這個問題。

它爲什麼只是read_only?也許它是一個奴隸?還是一個雙主,單寫作設置的碩士?我不會關掉read_only而不理解它爲什麼會啓用 - 它默認情況下不會啓用。

潛在的MySQL bug(這可能導致MariaDB錯誤)表明binlog_format = ROW可能是一個解決方案。

+0

是的,它只是因爲它是一個奴隸而read_only。我們發現底層問題是引擎類型,因爲一旦我們將默認值切換到myisam(這意味着臨時表是使用該類型創建的),它就可以工作。 – Arkandel

+0

嗯...我會把它稱爲一個bug,不能在read_only服務器上操作臨時表。 –