2017-08-29 148 views
-1

大家好!我試圖避免在phpbb3.1論壇中破壞我的數據庫。這個月它被粉碎了兩次。 所以我有兩個問題:
1)將MyISAM轉換爲InnoDB安全嗎?我的意思是將擴展工作正常?更新到下一版本後,論壇是否可行?
2)我能以哪種方式避免基地腐敗?Phpbb3.1 MyIsam數據庫損壞

p.s. 我也在這裏發佈這個問題: https://www.phpbb.com/community/viewtopic.php?f=466&t=2436326

+0

這個問題與PHP沒有任何關係 - 你爲什麼要標記它?另外:整個問題是關於數據庫管理 - 這是**不**編碼。 –

+0

我以爲phpbb與PHP –

+0

是有關係的。但你的**問題不是。如果你問的是你爲它編寫的代碼中的某些特定內容,而不是如果你問了如何使用它。 –

回答

1

我會冒險猜。你有電源故障,當它恢復時,MySQL抱怨某些表上的某個索引被損壞了?那桌是MyISAM?

  1. 使用myisamchk來修復表格。
  2. 查看http://mysql.rjweb.org/doc.php/myisam2innodb中的疑難解答,看看轉換到InnoDB是否會增加新的問題。可能不會有。一個2部分的PRIMARY KEY是InnoDB中沒有實現的唯一東西。另外,如果你的MySQL版本太舊,InnoDB可能還沒有FULLTEXT索引(如果你需要的話)。
  3. 更改my.cnf:key_buffer_size = 20Minnodb_buffer_pool_size等於可用內存的一半。
  4. ALTER TABLE xx ENGINE=InnoDB;每個表xx

我想(但不確定)每個更新/刪除/插入標記表可能損壞。它會寫入更改,但不會清除標記。當mysqld完全關閉時,所有內容都被刷新到磁盤並且這些標誌被清除。當mysqld恢復時,它會抱怨沒有被清除的標誌。所以...

索引是否被標記爲損壞完全取決於您是否修改了索引並崩潰。 (每張表都有一些索引,是的?)

通常情況下,MySQL設法在崩潰前刷新磁盤更改。只有在偶然的時候,這個崩潰纔會發生,因爲索引真的會被腐化。在維修上有一個「快速」模式,只需清除標誌 - 您可以嘗試。但是如果你知道記錄存在的時候遇到了一個神祕的「無法找到記錄」,那麼你最好REPAIR它。

+0

@youngB - 建議您在PHPBB論壇上發佈我的鏈接,以便他們可以思考是否存在潛在問題。 –

+0

感謝您的重播。 在這個步驟中,我還有一個問題是第3點。 如果「key_buffer_size」和「innodb_buffer_pool_size」的值比您建議的值更大,我應該進行更改嗎? –

+0

它們是主要的內存分配參數。如果它們加起來太多,你可能會「交換」,這對性能來說太糟糕了。 MyISAM需要Key_buffer;另一個是InnoDB。但是,即使完全InnoDB,key_buffer也不應該爲零。如果你有超過4GB的內存,InnoDB的buffer_pool建議使用70%的ram。 –