如何刷新二进制日志

时间:2010-10-03 07:55:24

标签: php mysql database innodb

我在另一篇文章上看到评论说InnoDB可以通过在每次提交时不刷新二进制日志来优化速度。

这是我第一次听说这个,那么这些二进制日志又是什么呢?我为什么要这样做(什么时候不这样做)以及怎么做?

3 个答案:

答案 0 :(得分:2)

MySQL的二进制日志充当与日记文件系统中的日志等效的数据库。每个查询都会记录在其中,因此如果数据库在某些时候崩溃,您可以“重放”二进制日志并以最小的痛苦重建数据库。它也用于复制。

此处有更多详情:http://dev.mysql.com/doc/refman/5.1/en/binary-log.html

答案 1 :(得分:2)

二进制日志用于崩溃恢复和复制。假设它们已启用,则有关刷新的两个主要适用设置为:

  • 的innodb_flush_log_at_trx_commit = 2
  • sync_binlog = 0

这些设置有利于速度超过“保证”的可靠性,因为它们允许操作系统延迟将缓冲区刷新到磁盘。

如果你在廉价的磁盘控制器上运行(大多数人都是),在每次提交时刷新日志非常慢。在进行大量写操作的网站上,我看到页面执行时间下降了10x-100x!您可以轻松运行自己的基准测试,并了解它对您的影响。

非常清楚,如果您希望获得最大的恢复优势,则必须将这两个值都设置为1.如上所述,在系统崩溃的情况下,您可能会丢失几秒钟的数据。对于某些网站,这是不可接受的。对于博客和论坛,这可能是值得的权衡。

您可以在此处详细了解设置:

http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html

还有许多与内存相关的选项,例如'innodb_buffer_pool_size'。搜索MySQL InnoDB调优应该会有所帮助。

答案 2 :(得分:1)

InnoDB通过重播日志从崩溃中恢复。它还用于将主服务器复制到从服务器。