有时,服务器重启后或数据库连接丢失后,mySQL数据库中的表会崩溃。 这种情况在过去3-4周内已经发生过几次。 这是错误消息的样子:
145 - 表' ./ xxx / sessions'标记为崩溃,应该是 修复了sesskey =的会话中的选择值 ' 60fa1fab3a3d285cfb7bc1c93bb85f64'和到期> ' 1395226673' [TEP STOP]
到目前为止,它一直是表格和#34;会议"和" whos_online"已经崩溃了。如果我修复phpmyadmin中的表,它将再次正常工作
在上一次崩溃后,我改变了#34;会话"从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
答案 0 :(得分:0)
首先,您应该解决表格首先被破坏的问题。 InnoDB尝试修复损坏的文件,但它无法做到魔法。重复的不安全停机或其他事故可能会严重破坏您的数据库!
如果您只有一个小网站,所有变种都很好。 MyISAM有点快(有时),而InnoDB提供了一些扩展功能。如果服务器足够强大,您可能不会遇到任何问题。在大多数情况下,我会坚持使用InnoDB,因为它会导致数据一致并且如果文件被破坏则会抛出错误,这与使用的MYISAM表不同,有时会在生产中抛出错误......
但是,如果某些事情严重中断,那么如果不自动地运行带有InnoDB的MySQL,则需要更多努力才能恢复运行。存在不同的InnoDB recovery modes,它们只能从服务器的shell中获得,并且需要修改配置文件,手动启动服务器,读取其输出以及可能执行其他操作。如果您对这些问题没有任何线索,可能需要坚持使用MyISAM。服务器始终启动,如果表完全中断,您可能需要导入备份。但这比编辑配置文件和读取数据库输出等更容易。