确保InnoDB数据库的ACID属性

必须采取哪些步骤来确保默认configuration的InnoDB服务器真正符合ACID标准? InnoDBconfiguration页面提到硬件本身必须configuration为实现fsync调用,即禁用任何写回caching。

这个页面提到了一些其他的问题,但是可能会混淆二进制日志和InnoDB日志,并且可能会过时地关于MySQL 5.x的默认设置。

在阅读二进制日志文档页面时,似乎一般不需要“sync_binlog = 1”的设置,只有ACID属性需要与时间点恢复和复制。

那么,禁用写回磁盘caching是否足够,还是有其他设置必须调整?

你问一个很难的问题。 以下是MySQL中的设置:

  • 同步FRM
  • 同步二进制日志
  • innodb-flush-log-at-trx-commit = 1(默认)
  • innodb_support_xa = 1(默认)
  • innodb_doublewrite = 1(默认)
  • sync-relay-log = 1(如果一个从机)
  • rpl_transaction_enabled = 1(如果一个奴隶 – 只在5.5 / Percona服务器)

并从OS /文件系统/等:

  • 禁用磁盘或RAID控制器上的任何不支持电池的高速caching。
  • 确保操作系统不在任何笔记本电脑模式等

禁用回写不一定会破坏ACID。 如果您的RAID控制器上有电池支持的写入caching,则不会这样做,并且写入容量会大幅增加。 需要注意的是,一些硬盘和固态硬盘(例如英特尔X-25)有自己的回写caching,即使你的RAID控制器是电池供电,他们肯定需要禁用。 设置O_DIRECT也将使您的操作系统和文件系统保持原样,让RAID控制器更有效地执行操作。

我通常使用这些设置来保证合理的可靠性

  innodb_flush_method = O_DIRECT
 innodb_support_xa = 1
 innodb-flush-log-at-trx-commit = 2