刚开始使用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。