MySQL的二进制日志(binlog)主要有 三种格式,具体如下:
一、格式类型
Statement格式 记录SQL语句的原始文本,仅包含可执行的DML语句(如INSERT、UPDATE、DELETE),不记录数据变化细节。这种格式的日志体积较小,适合主从复制场景。
Row格式
记录每一行数据的变化(如修改前后的具体内容),提供更详细的数据变更信息。由于需要存储数据差异,日志体积较大,但能确保数据复制的准确性,推荐用于生产环境。
Mixed格式
结合Statement和Row格式,先记录SQL语句,再记录受影响的数据行。这种格式兼顾了性能和数据完整性,但复杂度较高。
二、格式特点对比
| 格式类型 | 适用场景 | 优势 | 缺点 |
|----------------|-----------------------------------|-------------------------------|-------------------------------|
| Statement | 主从复制、审计 | 日志体积小,复制效率高 | 数据变更细节丢失 |
| Row| 高安全性、复杂查询复制| 数据变更可精确回放,但体积大 | | Mixed
三、其他相关说明
记录内容: 二进制日志记录修改数据的SQL语句、执行时间、操作数据等元信息,但不记录SELECT、SHOW等非修改类语句。 主从复制
数据恢复:通过binlog可回溯数据变更历史,辅助故障恢复。
建议根据实际需求选择合适的格式:
主库:优先使用Row格式保障数据一致性;
从库:Statement格式已足够;
复杂场景:考虑Mixed格式的灵活性。