del*_*nda 8 mysql database mysql-replication replication
即将开始使用 MySQL 复制,我想知道最好使用哪种 binlog 格式?有 Row、Statement 和 Mixed。
我将使用 5.1.49。
Row 目前正在获胜,但我只是想知道为什么我应该使用混合而不是行。
非常感谢,
德伦达
Syn*_*hro 11
基于语句的复制是最快和最紧凑的,但在某些情况下,它可能会在从服务器上产生与在主服务器上不同(非确定性)的结果,从而导致不一致。一个例子可能是:
UPDATE mytable SET a = a + 1 LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
无法保证哪一行会被更新,因为它没有排序顺序,并且磁盘上的顺序是不可预测或一致的。
基于行的复制通过复制更改的数据而不是查询来避免这个问题,但是像这样的语句:
UPDATE mytable SET a = a + 1;
Run Code Online (Sandbox Code Playgroud)
无论它影响多少行,都只需要为基于语句的复制复制几个字节:如果它更新 100 万行,基于行的复制将复制所有 100 万行,这将慢得多并创建更大的二进制日志。
混合模式在两者之间切换,使用最有效或最安全的方式(例如,简单的插入可能最好通过基于行的复制来完成 - using 语句可能会更慢)。出现问题的机会来自于识别哪些陈述是非确定性的,这是一个非平凡的问题。
总之:
官方文档在这里。
这也是一个老问题:您现在应该将 MySQL 5.5 用于任何新版本。我更喜欢 Percona 的构建。
归档时间: |
|
查看次数: |
16093 次 |
最近记录: |