共计 1315 个字符,预计需要花费 4 分钟才能阅读完成。
1. 日志类型
二进制日志记录了所有对 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
基于行的日志格式
将 my.ini 二进制格式修改为 binlog_format=ROW
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 的复制包括非确定性函数,存储过程等。
可以减少数据库锁的使用。
缺点:
要求主从数据库的表结构相同,否则就会中断复制。
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-09/135497.htm