MySQL的二进制日志是主从复制的重要组成部分
开启日志的变量为log_bin
在配置文件中添加下面配置
[mysqld]
log_bin =mysql-bin
配置的类型
statement
row
mixed
binlog_format = row|statement|mixed
statement模式
记录使数据产生变化的SQL语句,行数据修改和表格结构的修改,触发器的变化等等。
由于只记录命令行和相关信息,所以日志量较小,但对于某些不确定的函数执行时候,可能会产生主从不一致的情况,如CURRENTTIME()函数,UUID()函数
row模式
记录每一条变化的数据变更记录,然后在从机器上进行重放,是最安全的模式,但是在修改大量语句时候可能会产生大量的日志,浪费磁盘和网络IO,
在mysql5.6之后,加入了参数binlog_row_image来缓解这个问题,默认为FULL。
mysql> show variables like "binlog_row_image";
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| binlog_row_image | FULL |
+------------------+-------+
1 row in set (0.00 sec)
FULL为默认值, 意思是记录一行纪录里面的所有内容, 无论该列是否被修改。
MINIMAL仅记录被修改的列, 这样就可以大大减少记录量。
NOBLOB和FULL类型相似, 区别在于在TEXT和BLOB类型无更新时不会记录。
mixed模式
存在不确定函数时候,使用statement,其他时候使用row模式记录,虽然看似集合了两种模式的优点,但是个人并不推荐使用。