mysql-查看binlog日志

mysql-查看binlog日志

binlog有三种格式

  1. STATEMENT
  2. ROW
  3. MIXED

MySQL 5.7.7 之前,默认的格式是 STATEMENT,在 MySQL 5.7.7 及更高版本中,默认值是 ROW

可以使用配置文件来修改

vim /etc/mysql/mysql.conf.d/mysqld.cnf
log-bin=mysql-bin # 开启 binlog
# binlog-format=ROW # 选择 ROW 模式
# binlog-format=STATEMENT # 选择 STATEMENT 模式
binlog-format=MIXED # 选择 MIXED 模式
server_id=1000 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

使用以下命令,可以分别查看binlog相关信息

# 查看binlog是否开启
show variables like '%log_bin%';
# 查看binlog格式
show variables like "%binlog_format%";
# 查看binlog文件有哪些
show binary logs;
# 查看binlog内容
show binlog events in '文件名';

STATEMENT

内容

statement格式记录的是语句的本身的内容。如图所示

在这里插入图片描述

特点

**优点:**日志文件小,节约i/o,性能好

**缺点:**准确性差,对于系统函数now(), uuid()和自增值AUTO_INCREMENT等不能准确复制,或者不能复制。

ROW

5.1.5版本的MySQL才开始支持 row level 的复制

内容

row记录数据变化的内容,没有上下文

在这里插入图片描述

特点

优点: 准确,没有上下文信息。

**缺点:**日志文件大,性能差

MIXED

从5.1.8版本开始,MySQL提供了Mixed格式,实际上就是Statement与Row的结合。
在Mixed模式下,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。

使用5.7.23版本去执行以下语句,binlog内容如图所示

  insert into t values(null, 1, 1); 没有指定自增id插入 使用statement
  insert into t values (2,2,2); 指定自增id插入 使用statement
  alter table t add column e varchar(10); 增加字段 使用statement
  alter table t modify column e varchar(255); 修改字段 使用statement
  insert into t values (2,2,2,UUID()); 使用了uuid()函数,使用row
  delete from t2 where  id < 10; 删除使用statement
	insert into t2(c,d) select c,d from t; 批量插入使用row

在这里插入图片描述

使用MIXED格式,如何判断选择row还是statement,官网给出了以下case。

When running in MIXED logging format, the server automatically switches from statement-based to row-based logging under the following conditions:***(当使用MIXED格式时,将使用row来记录binlog。其余全部使用statement)***`

- `When a DML statement updates an NDBCLUSTER table.(在NDBCLUSTER集群中使用dml 修改时)`

- `When a function contains UUID().(使用uuid函数时)`

- `When one or more tables with AUTO_INCREMENT columns are updated and a trigger or stored function is invoked. Like all other unsafe statements, this generates a warning if binlog_format = STATEMENT.`

  `For more information, see Section 16.4.1.1, “Replication and AUTO_INCREMENT”.
......

总结 使用mixed格式,当mysql认为会导致数据不一致就会采用row,否则会使用statement。但是还是会有不一致的风险存在,所以目前生产级别还是推荐使用row级别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值