阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL二进制日志

190次阅读
没有评论

共计 1315 个字符,预计需要花费 4 分钟才能阅读完成。

1. 日志类型

MySQL 二进制日志

二进制日志记录了所有对 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

MySQL 二进制日志

基于行的日志格式

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

MySQL 二进制日志

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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1315字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中