mysql binlog格式是有哪些,各自优点和缺点有哪些?
MySQL 的 binlog
(二进制日志)用于记录对数据库进行的所有更改操作,主要用于数据恢复、主从复制和审计。binlog
有三种格式,每种格式在不同的场景下有各自的优点和缺点:
1. STATEMENT 格式
在 STATEMENT
格式下,MySQL 将每一条修改数据的 SQL 语句记录到 binlog
中,而不是记录具体的行级数据变化。换句话说,binlog
中记录的内容就是执行的 SQL 语句。
优点:
-
占用空间小:相比其他格式,
STATEMENT
格式只记录 SQL 语句,binlog
文件的大小通常较小。 -
性能较好:因为它只记录 SQL 语句,而不是每一行数据的变化,生成和写入
binlog
的开销较小,尤其是当修改了大量数据时,binlog
的生成速度和磁盘 I/O 负担较轻。 -
适合大多数简单的操作:对于简单的
INSERT
、UPDATE
、DELETE
语句,使用STATEMENT
格式足够高效。
缺点:
-
非确定性行为可能出错:如果 SQL 语句在执行时存在非确定性,如包含
NOW()
、UUID()
、RAND()
这样的函数,或者依赖于自定义的用户变量,STATEMENT
可能导致主从复制的不一致。 -
复杂语句的重放风险:某些复杂的 SQL 语句(如
INSERT ... SELECT
、触发器、存储过程等)在主从复制或数据恢复时可能会引发问题,因为这些语句的执行顺序和环境依赖于运行时的上下文。 -
性能副作用:某些语句在主库上执行一次,可能会在从库上执行多次,增加了从库的负担。例如,涉及到大规模表的
UPDATE
和DELETE
操作。
热门日志
分类
- Django(4)
- ssdb(1)
- Mac(7)
- C(1)
- memcache(1)
- Python(32)
- Vim(8)
- sed(2)
- ansible(3)
- awk(4)
- shell(3)
- about(1)
- git(9)
- bat(4)
- svn(0)
- docker(1)
- Tornado(1)
- go(2)
- 架构(18)
- Vue(1)
- game(2)
- Html(6)
- Java(8)
- Mysql(37)
- Ajax(2)
- Jsp(1)
- Struts(8)
- Linux(72)
- JavaScript(39)
- Staruml(0)
- Mouth(1)
- Php(102)
- Windows(8)
- Message(48)
- Lua(10)
- Compute(1)
- Redis(7)
- Nginx(12)
- Jquery(1)
- Apache(1)
- cocos2d-x(8)