2011-05-27 52 views
5

許多網站和腳本仍然使用MySQL而不是PostgreSQL。我有幾個低優先級的博客,我不想遷移到另一個數據庫,所以我使用MySQL。MySQL MyISAM數據丟失的可能性?

問題出在這裏,他們在的低內存VPS上。這意味着我無法啓用InnoDB,因爲它只使用大約80MB的內存來加載。所以我必須冒險運行MyISAM。

考慮到這一點,我在用MyISAM看什麼樣的數據丟失?如果有人在儲存博客文章時發生停電,我是否會丟失該文章或整個數據庫?

在這些低端機器上,只要整個數據庫不丟失,我就可以丟失一些最近的評論或博客文章。

+0

你的VPS給你的內存有多少?您可能需要考慮使用不同的主機。 Dreamhost擁有每月30美元的600 MB VPS。他們認爲這足以滿足前100名博客的需求。如果30美元太多,也許你的數據不值得那麼多,你應該設置一個腳本來通過MySQL轉儲進行日常(或更經常)的備份。 – Kibbee 2011-05-27 23:59:53

+0

謝謝,但我不願意每月僅支付30美元,只有600MB。另外,如果我能找到一種方法來使MyISAM工作,沒有理由增加我的RAM。 – Xeoncross 2011-05-28 15:07:58

+1

http://stackoverflow.com/search?q=myisam+corrupt – 2011-05-30 14:07:48

回答

2

您可能會發現感興趣的以下MySQL性能優化文章:

對我來說,不僅是表鎖。表鎖只是您需要考慮在生產中使用它的MyISAM限制之一。特別是如果你從「傳統」數據庫來的話,你很可能會被MyISAM行爲(以及由此導致的默認MySQL行爲)震驚 - 它會被不正常的關閉破壞,如果某些錯誤是發現等等

http://www.mysqlperformanceblog.com/2006/06/17/using-myisam-in-production/

+0

「隱藏的損壞如果可能是內存不良的操作系統或MySQL的錯誤,但可能會發生損壞並長期被MyISAM存儲引擎忽視,這種隱藏的損壞後來可能導致崩潰錯誤的查詢結果和進一步的數據損壞。 – Xeoncross 2011-05-31 15:03:59

-4

在我看來,MyISAM沒有一種數據丟失。

停電造成數據丟失的風險是由於停電造成的,而不是數據庫存儲機制造成的。

+0

嗯,我假設一些重要的寫入可能發生在MyISAM信息表,標題或行上,導致該文件處於無效狀態。 MyISAM如何處理這個問題? – Xeoncross 2011-05-27 23:32:36

+0

嗯,對不起,我真的不知道。我覺得MySQL/MyISAM是可靠的,但我忽略了這個級別的實現細節。我會檢查MySQL文檔...甚至是源代碼。 – 2011-05-27 23:38:41

+0

這隻有在您忽略不會丟失數據的後端存在的情況下才是正確的。是的,造成損失的直接原因是停電,但說可能會寫入保留數據的後端,MyISAM可能會導致數據丟失並不意味着錯誤,並且您忽略了其他問題與MyISAM。 – 2011-06-03 09:11:52

0

MySQL manual points列出可能會損壞您的桌子的事件類型,並且有一篇文章解釋如何使用myisamchk to repair tables。你甚至可以發出一個查詢來修復它。

REPAIR TABLE table; 

但是,沒有關於是否某種類型的崩潰可能是「無法修復」的信息。即使我正在進行備份,我也不能允許這種數據丟失。

0

服務器崩潰時,您的自動增量主鍵可能會損壞,因此您的博客帖子ID可能會從122,123,75912371234,75912371235(服務器在123之後崩潰的位置)跳轉。我已經看到它發生,並不漂亮。

5

的MyISAM是不是ACID兼容,因此缺乏耐久性。這實際上取決於什麼花費更多......內存來利用InnoDB或停機時間。 MyISAM肯定是一個可行的選擇,但是你的應用程序需要從數據庫層中獲得什麼?使用MyISAM可以讓生活更加艱難,但在某些情況下,MyISAM可以很好。僅使用邏輯mysqldump備份會由於其鎖定性質而中斷服務。如果您正在使用二進制日誌記錄,則可以將它們備份,以便爲您提供增量備份,以便在MyISAM表中某些內容被損壞時進行重新恢復。

+0

+1最後,我真的寧願花更多的時間來處理停機時間。如果只有一兩個很少寫成表格的東西,但是+10表格我不應該冒險。即使SQLite將是一個更好的選擇。 – Xeoncross 2011-06-04 16:32:37

0

您始終可以在同一個從屬於您的數據庫的VLAN上備份另一臺主機作爲備份,這將顯着降低風險。我認爲唯一的其他選擇,你必須是:

  1. 得到更多的內存爲您的服務器或一些服務殺
  2. 看看你的主機已經共享任何類型的數據庫主機上的VLAN,您可以使用一個小費用。
  3. 進行定期備份並做好最壞的準備。