你的位置:首页 > 数据库

[数据库]mysql 二进制日志


 

1.日志类型

image

 

二进制日志记录了所有对mysql数据库的修改事件,包括增删改事件和对表结构的修改事件。

 

2.配置使用二进制日志

在my.ini 配置

log-bin=mysql-bin

 

2.二进制日志格式

基于段的日志格式

binlog_format=STATEMENT

记录了操作的sql语句。

优点:

日志记录量相对较小,节约磁盘及网络I/O,只对以一条记录修改或插入ROW格式所产生日量小于段产生的日志量。

缺点:

必须记录上下文信息,保证语句在从服务器上的执行结果和在主服务器上相同。

特定函数如UUID,USER()这样非确定性的函数无法复制。

可能造成mysql复制的主备服务器数据不一致,从而中断复制链路。

显示binlog 格式

show variables like 'binlog_format';

set session binlog_format=statement;

 

显示二进制日志

show binary logs;

//刷新日志

flush logs;

 

 

在命令行下执行:

mysqlbinlog ../data/mysql-bin.000003

 

image

 

基于行的日志格式

将my.ini 二进制格式修改为binlog_format=ROW

image

 

row 的优点

row格式可以避免MYSQL复制中出现主从不一致的问题,官方推荐这种格式。

同一个sql语句修改了10000条数据的情况下。基于段的日志只会记录这个SQL语句。基于行的日志会有10000条记录,分别记录每一行数据的修改。

1.是mysql主从复制更加安全。

2.对每一行数据修改比基于段的复制高效。

如果误操作修改了数据库中的数据,同时没有备份可以恢复时,我们就可以通过分析二进制日志,对日志中记录的数据修改操作做反向处理的方式来达到恢复数据的目的。

缺点:

记录日志量较大

binlog_row_image=[full,minimal,noblob]

full : 记录列的所有修改

minimal :只记录修改的列。

noblob :如果是text类型或clob字段,不记录 这些日志。

使用 mysqlbinlog -vv ../data/mysql-bin.000005 查看明细日志。

set session binlog_row_image=minimal

混合日志格式:

binlog_format=MIXED

特点:

根据sql语句由系统决定在记录端和基于行的日志格式中进行选择。

数据量大小由所执行的SQL决定。

如何选择二进制格式

建议

binlog_formart =mixed

or

binlog_format=row;

binlog_row_image=minimal;

复制方式:

1.基于SQL语句的复制(SBR)

优点:

生成日志量少,节约网络传输的ID.

并不要求对主从数据库的表定义完全相同。

相比于基于行的复制方式更为灵活。

缺点:

对于非确定事件,无法保证主从复制数据的一致性。

对于存储过程,触发器

2.基于行的复制(RBR)

优点:

可以应用于任何SQL的复制包括非确定性函数,存储过程等。

可以减少数据库锁的使用。

缺点:

要求主从数据库的表结构相同,否则就会中断复制。