有时,在服务器重新启动或与数据库的连接断开后,mySQL数据库中的表会崩溃。
在过去的3-4周中,这种情况发生了几次。
错误消息如下所示:
到目前为止,已经崩溃了“sessions”和“whos_online”表。如果我修复phpmyadmin中的表,它将再次正常工作
上次崩溃后,我将“ session ”从MyISAM更改为InnoDB。表“whos_online”仍使用MyISAM。
我使用osCommerce 2.2 rc2a,并且正在寻找有关此事的任何想法和建议。
一种解决方案可能是将这两个表都更改为InnoDB,因为它应该具有自我修复功能。这是个好主意还是坏主意?
另一种方法是将它们放在MyISAM中,并使用类似PHP的文件来执行类似操作,以回显错误消息:
if $error contain "is marked as crashed and should be repaired"
run a table repair script
这是一个好主意还是坏的主意?
这是我的服务器规格
数据库:MySQL 5.5.36-cll
PHP版本:5.3.15
最佳答案
首先,您应该首先解决表损坏的问题。 InnoDB尝试修复损坏的文件,但不能做魔术。反复不安全的关机或其他事故可能会严重破坏您的数据库!
如果您只有一个小型网站,那么所有变体都不错。 MyISAM更快(有时),而InnoDB提供了一些扩展功能。如果服务器足够坚固,则可能不会遇到任何问题。在大多数情况下,我会坚持使用InnoDB,因为它会处理一致的数据并在文件损坏时引发错误,这与使用的MYISAM表不同,有时会在生产中引发错误...
但是,如果某件事严重中断,那么如果它不能自动运行,则需要付出更多的努力才能使运行InnoDB的MySQL恢复运行。存在不同的InnoDB recovery modes,它们只能从服务器的 shell 中获得,并且需要修改配置文件,手动启动服务器,读取其输出以及可能执行一些其他操作。如果您对这些问题一无所知,则可以改用MyISAM。服务器将始终启动,并且如果表完全损坏,则可能需要导入备份。但这比编辑配置文件和读取数据库输出等更容易。
关于mysql - 崩溃后自动修复数据库表,或切换到InnoDB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22522824/