2017-08-29 149 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。 –