MySQL之binlog的记录格式
在MySQL的配置文件(Linux: /etc/my.cnf , Windows: \my.ini)下,修改配置在[mysqld] 区块设置/添加log-bin=mysql-bin
, 这个表
示binlog日志的前缀是mysql-bin,以后生成的日志文件就是 mysql-bin.123456 的文件后面的数字按顺序生成。每次mysql重
启或者到达单个文件大小的阈值时,新生一个文件,按顺序编号。
Binlog的分类设置
MySQL Binlog的格式,那就是有三种,分别是STATEMENT,MIXED,ROW。
在配置文件中选择配置binlog_format=row
区别:
1)statement
- 语句级,binlog会记录每次一执行写操作的语句。
- 相对row模式节省空间,但是可能产生不一致性,比如
update tt set create_date=now()
如果用binlog日志进行恢复,由于执行时间不同可能产生的数据就不同。 - 优点:节省空间
- 缺点:有可能造成数据不一致。如果主机自定义了函数,从机在执行sql时可能会报错
2)row
- 行级,binlog会记录每次操作后每行记录的变化。
- 优点:保持数据的绝对一致性。因为不管sql是什么,引用了什么函数,他只记录执行后的效果。
- 缺点:占用较大空间。
3)mixed
- statement的升级版,一定程度上解决了,因为一些情况而造成的statement模式不一致问题
在某些情况下譬如:
当函数中包含 UUID() 时;
包含 AUTO_INCREMENT 字段的表被更新时;
执行 INSERT DELAYED 语句时;
用 UDF 时;
会按照 ROW的方式进行处理 - 优点:节省空间,同时兼顾了一定的一致性。
- 缺点:还有些极个别情况依旧会造成不一致,
另外statement和mixed对于需要对binlog的监控的情况都不方便。