哪种binlog格式用于MySQL复制?

刚开始使用MySQL复制,我想知道什么样的binlog格式是最好的使用? 有行,声明和混合。

我将要使用5.1.49。

Row目前正在获胜,但我只是想知道为什么我应该使用混合而不是行。

非常感谢,

Delenda

基于语句的复制是最快速和最紧凑的,但是在某些情况下,它可能在从站上产生与主站不同的(非确定性)结果,从而导致不一致。 一个例子可能是:

UPDATE mytable SET a = a + 1 LIMIT 1; 

没有办法保证哪一行会更新,因为没有sorting顺序,磁盘上的订单是不可预测的或一致的。

基于行的复制通过复制已更改的数据而不是查询来避免此问题,但是像这样的语句:

 UPDATE mytable SET a = a + 1; 

要求复制只有几个字节的基于语句的复制,无论它影响多less行:如果它更新一百万行,基于行的复制将复制所有一百万行,这将会慢得多,并创build更大的二进制日志。

混合模式在两者之间切换,使用最有效或最安全的方式(例如,简单的插入可能最好通过基于行的复制完成 – 使用语句可能会更慢)。 遇到问题的机会在于认识到哪些陈述是非确定性的,这是一个不平凡的问题。

综上所述:

  • 基于行:总是安全的,可能在时间和空间上非常缓慢和低效
  • 基于声明:并不总是安全的,但可能要快得多
  • 混合模式:理论上两全其美,但可能会导致错误,导致性能下降或数据错误,取决于错误的方式!

官方文档在这里 。

这也是一个老问题:现在你应该使用MySQL 5.5来创build新的版本。 我更喜欢Percona的构build。