2009-04-13 65 views
2

我有一個遺留的Web應用程序php4/mysql4(MyISAM,db包含一些cms,一些用戶數據,一些日曆應用程序)。現在我要用php5/mysql5遷移到新的服務器。遷移php4/mysql4到php5/mysql5:切換到InnoDB?

我應該在遷移mysql數據庫時更改爲InnoDB嗎? - 預期的優勢/劣勢/風險?- MyISAM是否被棄用或將來會有?或者我可以安全地保留它嗎? - 我聽說MyISAM很容易損壞,InnoDB怎麼樣? - InnoDB是更容易還是更安全的備份和恢復?

當我改變(打破SQL查詢)或破壞邏輯(由於更改的鎖定機制),它可以中斷我的代碼嗎?如果是這樣,典型的情況是什麼?

(對於PHP的問題,我創建了一個不同的問題:Migrating php4/mysql4 to php5/mysql5: expected php issues?

回答

2

從表升級中分離MySQL v4/v5升級是值得的。這減少了潛在的問題範圍。這就是說,如果重新啓動數據庫很少發生,那麼無論如何,在v4/v5升級之前需要花一些時間來查看InnoDB服務器選項,因爲它們中的很多需要重新啓動數據庫。建議的兩個是innodb_file_per_table = 1和innodb_flush_log_at_tx_commit = 1(查看它們),你也應該看看innodb_buffer_pool_size,因爲如果沒有人改變它,幾乎肯定會太低。

MyISAM將在很長一段時間。這是一個非常強大的磁盤格式,具有一些適用於許多情況的特性。特別是,它有一個快速的SELECT,對於沒有更新或很少更新的小型表格可能很有用。也就是說,一個非常熱的表(很多很多SELECT)將被遷移到InnoDB中受益,因爲MyISAM不支持併發讀取。

MyISAM幾乎總是在數據庫崩潰時倖存下來,只需要一個REPAIR TABLE即可。 InnoDB並不總是那麼幸運。 MyISAM也可以從數據庫下面備份出來;即使你沒有事先鎖定表格,你很可能會得到一個可以正常工作的文件。 InnoDB文件並不那麼友善;這就是innodb_hot_copy存在的原因。

我們最近經歷了一次MySQL v4/v5升級,我們只有一個SQL問題:混合模式JOIN s。將隱式表連接與顯式LEFT JOIN子句混合時,版本4的解析器相當寬容。版本5並不那麼寬容。因此,我們藉此機會刷新應用程序並將所有JOIN s升級到明確的JOIN s。除了一兩個錯過的點外,這是非常成功的。

我建議你設置一個PHP 4與MySQL v5交談的測試環境。這將讓你測試所有這一切。

3

你應該看看,就會使用你的數據庫如何他們關鍵的事情。如果它比Write更多,那麼你應該堅持使用MyISAM,如果它的Write比Read更多,你應該看看InnoDB。

如果你想知道InnoDB和MyISAM之間的區別,那麼Wikipedia has a great list的區別。

MyISAM在寫入任何現有行時使用表級鎖定,而InnoDB使用行級鎖定。

對於經常更新許多行的大型數據庫應用程序,行級鎖定非常重要,因爲單個表級鎖定會顯着降低數據庫中的併發性。