vault backup: 2026-05-20 00:00:48
This commit is contained in:
@@ -137,6 +137,18 @@ binlog_format = MIXED # 折中方案
|
||||
>
|
||||
> 答案:**ROW**。理由很简单——数据一致性永远排在体积和可读性之前。虽然 ROW 模式的 binlog 体积更大,但它消除了所有不确定性,而节省空间带来的好处远不及一次主从不一致造成的损失。
|
||||
|
||||
### Row vs Statement 对特殊场景的影响
|
||||
|
||||
除了非确定性函数(`NOW()`、`RAND()`)之外,还有两类场景在 STATEMENT 模式下容易引发主从不一致:
|
||||
|
||||
| 场景 | 问题原因 |
|
||||
|------|---------|
|
||||
| **字符集 / Collation 不一致** | 主库和从库 collation 不同时,STATEMENT 模式下的字符串比较可能得出不同结果;ROW 模式传输原始字节,不受影响 |
|
||||
| **自增 ID(auto_increment)** | 主从并发写入时,STATEMENT 模式下从库的自增值可能与主库不同步,导致重复或跳跃 |
|
||||
| **INSERT_DELAYED** | 5.6+ 已移除,执行时机不确定 |
|
||||
|
||||
**结论**:生产环境一律使用 `binlog_format = ROW`,避免上述所有隐患。
|
||||
|
||||
## Binlog 文件结构
|
||||
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user