Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145239
  • 博文数量: 82
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 890
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-08 22:30
文章分类

全部博文(82)

文章存档

2011年(1)

2009年(81)

我的朋友

分类: Mysql/postgreSQL

2009-06-23 10:52:53

以下引用了中文官方文档:
----
当innodb_flush_log_at_trx_commit被设置为0,日志缓冲每秒一次地被写到日志文件,并且对日志文件做到磁盘操作的刷新,但是在一个事务提交不做任何操作。当这个值为1(默认值)之时,在每个事务提交时,日志缓冲被写到日志文件,对日志文件做到磁盘操作的刷新。当设置为2之时,在每个提交,日志缓冲被写到文件,但不对日志文件做到磁盘操作的刷新。尽管如此,在对日志文件的刷新在值为2的情况也每秒发生一次。我们必须注意到,因为进程安排问题,每秒一次的刷新不是100%保证每秒都发生。你可以通过设置这个值不为1来获得较好的性能,但随之你会在一次崩溃中损失二分之一价值的事务。如果你设置这个值为0,那么任何mysqld进程的崩溃会删除崩溃前最后一秒的事务,如果你设置这个值为2,那么只有操作系统崩溃或掉电才会删除最后一秒的事务。尽管如此,InnoDB的崩溃恢复不受影响,而且因为这样崩溃恢复开始作用而不考虑这个值。注意,许多操作系统和一些磁盘硬件会欺骗刷新到磁盘操作。尽管刷新没有进行,你可以告诉mysqld刷新已经进行。即使设置这个值为1,事务的持久程度不被保证,且在最坏情况下掉电甚至会破坏InnoDB数据库。在SCSI磁盘控制器中,或在磁盘自身中,使用有后备电池的磁盘缓存会加速文件刷新并且使得操作更安全。你也可以试着使用Unix命令hdparm来在硬件缓存中禁止磁盘写缓存,或使用其它一些对硬件提供商专用的命令。这个选项的默认值是1。
为在复制中建立中最大可能的可靠和一致性,你应该在主服务器上的my.cnf文件里使用innodb_flush_log_at_trx_commit=1和sync-binlog=1。

----

以下是我翻译了一段5.0的英文文档:
----
sync_binlog

如果这个变量的值是正的,MySQL服务器每写二进制日志sync_binlog次就把日志同步到硬盘上(使用fdatasync())。注意如果使用了 autocommit,那么每执行一条SQL(增、删、改)都会写二进制日志,否则是每个事务写一次。缺省值是0,不依据写日志的次数同步。1是最安全的选择,在崩溃时最多丢失一条SQL或者事务,由于没有同步到硬盘上。但这也是最慢的选择(除非硬盘有一个电池备份的cache,会让同步非常快)。
如果sync_binlog是0(缺省值),没有额外的刷新。MYSQL依赖操作系统把日志文件刷新到硬盘上,就像其他普通文件一样。

----

看来为了安全,sync_binlog=1是一个重要设置。但它会对性能有多大影响也需要确认。
阅读(557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~