2010-10-03 60 views
1

我看了另一篇文章的评论,InnoDB可以通过在每次提交时不刷新二进制日志来加速优化。如何刷新二进制日志

这是我第一次听到这个消息,那么这些二进制日志是什么,这是什么冲洗?我为什么要这样做(何时不这样做)以及如何?

回答

2

MySQL的二进制日志充当等效于日志文件系统中的日志的数据库。每个查询都会被记录下来,这样,如果数据库在某个时候崩溃了,那么可以“重放”二进制日志并以最小的痛苦重建数据库。它也用于复制。

更多细节在这里:http://dev.mysql.com/doc/refman/5.1/en/binary-log.html

+0

所以如果我使用mysql加密http://dev.mysql.com/doc/refman/5.1/en/encryption-functions.html来加密密码,这些密码和他们的查询将以明文形式存储在这个日志中? – dave 2010-10-03 08:09:37

+0

是的,查询的字面文本以明文方式存储在日志中。 – 2010-10-04 23:56:10

1

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

2

二进制日志用于崩溃恢复和复制。假设他们被启用,对于冲洗的两个主要应用设置为:

  • 的innodb_flush_log_at_trx_commit = 2
  • sync_binlog = 0

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

如果你正在廉价的磁盘控制器上运行(大多数人都在),每次提交刷新日志都是非常慢。在一个写很多的网站上,我看到页面执行时间下降了10倍到100倍!运行你自己的基准很容易,看看它如何影响你。

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

你可以阅读更多关于这里的设置:

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

还有像“innodb_buffer_pool_size”配置以及许多存储相关的选项。搜索MySQL InnoDB调优应该有所帮助。

相关问题