这个问题第一次发生在我身上。昨天,我们的一个mysql系统服务器崩溃了,当它重新启动时,最后几个插入就完全回滚了。
我确信它们是正确的插入,因为我们在正确生成插入打印PDF和PDF之后获取结果。系统在2到3分钟的插入操作后崩溃了。
系统是基于PHP - MySQL的,我们使用MyISAM作为存储引擎,用于自动提交表。
这是唯一的,在系统崩溃后,我们通常有崩溃的表,但不像回滚操作。在系统崩溃后,所有的表都完好无损,运行正常。
有人能向我解释如果自动提交启动的话怎么可能。提前感谢
发布于 2013-12-31 14:53:04
MyISAM不支持事务、提交或回滚。你必须切换到InnoDB。

InnoDB具有用于回滚、提交、事务隔离和MVCC的机制、日志文件和关联内存结构。
MyISAM没有这样的基础设施。每个MyISAM表都是自己的实体。
下面是切换到InnoDB的一个很好的理由: MyISAM不缓存数据。它让操作系统做到了这一点。对于MySQL/Linux来说,这是一个可怕的想法,对于MySQL/Windows来说,这是一个可怕的噩梦。我在过去写过这个区别:InnoDB和MyISAM的主要区别是什么?
因此,在崩溃的情况下,您不仅丢失了OS没有刷新到磁盘的任何数据,而且还可能不得不运行核对表/修理表来修复受影响的MyISAM表头中打开的文件计数。
在您的示例中,您使用的是俄罗斯轮盘赌,它依赖于服务器崩溃或mysqld崩溃后来自MyISAM表的数据。
请参阅我以前关于使用和调优InnoDB的文章
在你的评论中,你问
在崩溃前2到3分钟插入的数据是否有可能在MyISAM中丢失?
当然!我三年前见过这种事。我在MyISAM (共享内存)中创建了一个/dev/shm表。我加载了一个3GB的.MYD和2GB的.MYI。在加载它时,我在表上运行了ls -l,它一直说.MYD为0字节,.MYI为1024字节。5分钟后,我杀死了大量插入物。突然,数据和索引页开始涌入表文件。如果mysqld真的崩溃了,那么这些数据和索引页面就永远无法到达表。在您的示例中,对于所有打开的MyISAM表来说,这种情况在大量写入的数据库环境中都是如此。
https://dba.stackexchange.com/questions/55869
复制相似问题