首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于系统崩溃,很少有Insert查询回滚

问由于系统崩溃,很少有Insert查询回滚
EN

Database Administration用户
提问于 2013-12-31 06:28:39
回答 1查看 205关注 0票数 0

这个问题第一次发生在我身上。昨天,我们的一个mysql系统服务器崩溃了,当它重新启动时,最后几个插入就完全回滚了。

我确信它们是正确的插入,因为我们在正确生成插入打印PDF和PDF之后获取结果。系统在2到3分钟的插入操作后崩溃了。

系统是基于PHP - MySQL的,我们使用MyISAM作为存储引擎,用于自动提交表。

这是唯一的,在系统崩溃后,我们通常有崩溃的表,但不像回滚操作。在系统崩溃后,所有的表都完好无损,运行正常。

有人能向我解释如果自动提交启动的话怎么可能。提前感谢

EN

回答 1

Database Administration用户

发布于 2013-12-31 14:53:04

MyISAM不支持事务、提交或回滚。你必须切换到InnoDB。

InnoDB体系结构

InnoDB具有用于回滚、提交、事务隔离和MVCC的机制、日志文件和关联内存结构。

MyISAM没有这样的基础设施。每个MyISAM表都是自己的实体。

下面是切换到InnoDB的一个很好的理由: MyISAM不缓存数据。它让操作系统做到了这一点。对于MySQL/Linux来说,这是一个可怕的想法,对于MySQL/Windows来说,这是一个可怕的噩梦。我在过去写过这个区别:InnoDB和MyISAM的主要区别是什么?

因此,在崩溃的情况下,您不仅丢失了OS没有刷新到磁盘的任何数据,而且还可能不得不运行核对表/修理表来修复受影响的MyISAM表头中打开的文件计数。

在您的示例中,您使用的是俄罗斯轮盘赌,它依赖于服务器崩溃或mysqld崩溃后来自MyISAM表的数据。

请参阅我以前关于使用和调优InnoDB的文章

试试看!

更新2014-01-03 10:29 EST

在你的评论中,你问

在崩溃前2到3分钟插入的数据是否有可能在MyISAM中丢失?

当然!我三年前见过这种事。我在MyISAM (共享内存)中创建了一个/dev/shm表。我加载了一个3GB的.MYD和2GB的.MYI。在加载它时,我在表上运行了ls -l,它一直说.MYD为0字节,.MYI为1024字节。5分钟后,我杀死了大量插入物。突然,数据和索引页开始涌入表文件。如果mysqld真的崩溃了,那么这些数据和索引页面就永远无法到达表。在您的示例中,对于所有打开的MyISAM表来说,这种情况在大量写入的数据库环境中都是如此。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/55869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档