2009-11-26 80 views
4

我一直在向MySQL數據庫添加表,方法是將&從文件粘貼到mysql命令行應用程序中。我的過程是從文件複製CREATE TABLE語句並將其粘貼到我的開發數據庫中,然後將其粘貼到另一臺機器上的測試數據庫中。我是唯一使用測試數據庫的人。我的CREATE TABLE語句指定Engine = InnoDB。測試數據庫啓用了InnoDB。意外的MySQL表引擎更改?

最近另一位開發人員發現測試數據庫上的表都是MyISAM表。我檢查了我的文件,它仍然說「引擎= InnoDB」的一切。我檢查了我的開發數據庫,​​那裏的表是Engine = InnoDB。

爲了證明測試數據庫與InnoDB沒有問題,我只需要ALTER TABLED將引擎設置爲所有表上的InnoDB。

我希望我只是複製&粘貼或其他愚蠢的錯誤。但它似乎很奇怪,所有測試表是MyISAM ...當然,我不能是我的錯誤一致。使用mysqldump完成所有備份&恢復。

有沒有一種無意中更換引擎的方法?

回答

4

我認爲這是衆所周知的MySQL陷阱的另一個實例;我自己也碰到過幾次這個問題。

基本上問題是,如果InnoDB引擎無論何種原因無法啓動(通常是配置問題) - 那麼MySQL會默默地回退到MyISAM引擎。即使你的聲明說:

CREATE TABLE (...) ENGINE=InnoDB; 

然後,如果InnoDB的不活躍,MySQL將高興地創建一個MyISAM表,甚至沒有警告你。即使您後來發現並修復InnoDB問題,在問題期間創建的所有表仍然保留MyISAM。再見數據完整性! :)

您可以運行SHOW ENGINES以查看哪些引擎處於活動狀態。有關更多詳細信息,請參閱this MySQL bug report

+1

這不會發生在現代版本;如果InnoDB無法啓動,將導致服務器啓動失敗。另一方面,如果它在配置中被禁用,它仍然會替代引擎。 – MarkR 2009-11-26 07:51:33

+0

謝謝,我不知道。 :) – intgr 2009-11-26 10:34:37