wwdwwd
注册会员

初级会员
UID 66770
精华
0
积分 76
帖子 55
金钱 76 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-9-20
状态 离线
|
[推荐阅读] 一个辣手的问题
大概明白楼主的意思了。有几点:
1:一般情况下可以用事务来解决部分问题。如果其中一条sql更新不正确,则整体回滚,保证数据的完整性;
2:innodb存储引擎里面有一个设置,用来设置跟事务相关的数据完整性问题;
照抄手册中内容如下:
innodb_flush_log_at_trx_commit
当innodb_flush_log_at_trx_commit被 设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。当这个值为1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。当设置为2之时,在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。尽管如此,在对日志文件的刷新在值为2的情况也每秒发生一次。我们必须注意到,因为进程安排问题,每秒一次的刷新不是100%保证每秒都发生。你可以通过设置这个值不为1来获得较好的性能,但随之你会在一次崩溃中损失二分之一价值的事务。如果你设置这个值为0,那么任何mysqld进程的崩溃会删除崩溃前最后一秒的事务,如果你设置这个值为2,那么只有操作系统崩溃或掉电才会删除最后一秒的事务。尽管如此,InnoDB的崩溃恢复不受影响,而且因为这样崩溃恢复开始作用而不考虑这个值。注意,许多操作系统和一些磁盘硬件会欺骗刷新到磁盘操作。尽管刷新没有进行,你可以告诉mysqld刷新已经进行。即使设置这个值为1,事务的持久程度不被保证,且在最坏情况下掉电甚至会破坏InnoDB数据库。在SCSI磁盘控制器中,或在磁盘自身中,使用有后备电池的磁盘缓存会加速文件刷新并且使得操作更安全。你也可以试着使用Unix命令hdparm来在硬件缓存中禁止磁盘写缓存,或使用其它一些对硬件提供商专用的命令。这个选项的默认值是1。
我的理解如下:
在使用innodb存储引擎更新数据时,不会直接把数据更新到磁盘上,而是把数据更新到日志缓冲和数据缓冲中。按照一定的规则会把日志缓冲和数据缓冲中的信息更新到磁盘上,上面的参数正式说明这个规则。据我猜测,当日志缓冲被更新到磁盘上时,对应的数据缓冲也会被更新到磁盘上,以保证统一。
innodb_flush_log_at_trx_commit=0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新
innodb_flush_log_at_trx_commit 日志缓冲到日志文件 日志文件到磁盘刷新
0 1次/s,0次/事务 1次/s,,0次/事务
1 0次/s,1次/事务 0次/s,1次/事务
2 0次/s,1次/事务 1次/s,0次/事务
按照如上的理解:楼主是不用担心的,mysql崩溃或操作系统崩溃,会丢失一些事务,但数据的完整性可以得到保证,故而可以重新来一次就行。当然有ups之类的更好。
[ 本帖最后由 wwdwwd 于 2008-7-9 11:37 AM 编辑 ]
|
|