由于断电,服务器重新启动后,我们在上午(网站中创build的客户端logging)中丢失了数据库中保存的所有数据。 在崩溃前几分钟,我在一些例行检查中看到了“MySQL查询浏览器”上的这些数据。 事故发生后,上午创造的所有logging都消失了,而我能看到的最新logging是在前一天晚上7点创build的。 似乎所有的INSERT语句都是在caching中执行的,因为停电,无法刷新。 MySQL使用这种caching机制吗? 如果是的话,它是否是防撞的,我怎么configuration它?
环境:mysql 5.X + ubuntu 10.4 + raid1 + Jira4.1.2
除非你使用插入延迟,插入/更新/删除立即提交。 密钥文件可能没有完全写入。 如果你有一个caching控制卡,它可能会caching它,并告诉操作系统它已经提交了。 你有没有运行检查表/维修表? 如果是这样,你可能会发现只是索引是腐败的,大部分logging仍然存在。
MyISAM速度很快,但是,如果发生电源问题/服务器崩溃,则缺less一些需要采取的预防措施。 InnoDB是另一种更安全一些的方法,但是,根据你正在查询的types,速度较慢。 它增加了行级锁而不是表锁,但是,select count(*)需要扫描行,而MyISAM可以从索引中回答。
您可以设置复制以将数据发送到镜像,但是,如果它位于同一个数据中心中,则会面临数据损坏的可能性。
MySQL可以configuration为caching数据,但通常不会。 只有当数据在磁盘上时才会回应客户端。 也许你已经设置了mysql,试图在启动时自动修复非closures的表,并删除了一些logging。
查询caching和sortingcaching只caching可从表中读取的数据(例如select … from)。
这可能是操作系统configurationcaching写入(我认为Ubuntu的ext3,默认为5秒提交…我不知道在10.4的ext4)。