在 Mixed 模式下,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。
如果SQL语句为UPDATE/DELETE等修改语句时,并不是所有操作都以ROW模式记录变更操作。

测试Demo:

## 创建测试表
CREATE TABLE TB001(ID INT AUTO_INCREMENT PRIMARY KEY,C1 INT,C2 INT); ## 插入测试数据
INSERT INTO TB001(C1,C2)VALUES(1,1); ## 更新数据
UPDATE TB001 SET C2=2 WHERE C1=1;

查看生成的BINLOG事件:

SHOW BINLOG EVENTS IN 'mysql-bin.000002' FROM 9150 LIMIT 100;
+------------------+-------+------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-------+------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000002 | 9520 | Gtid | 6322494 | 9585 | SET @@SESSION.GTID_NEXT= '4f268bbc-f79e-11e8-8d9d-b8ca3af84795:39' |
| mysql-bin.000002 | 9585 | Query | 6322494 | 9666 | BEGIN |
| mysql-bin.000002 | 9666 | Intvar | 6322494 | 9698 | INSERT_ID=1 |
| mysql-bin.000002 | 9698 | Query | 6322494 | 9809 | use `db001`; INSERT INTO TB001(C1,C2)VALUES(1,1) |
| mysql-bin.000002 | 9809 | Xid | 6322494 | 9840 | COMMIT /* xid=1903 */ |
| mysql-bin.000002 | 9840 | Gtid | 6322494 | 9905 | SET @@SESSION.GTID_NEXT= '4f268bbc-f79e-11e8-8d9d-b8ca3af84795:40' |
| mysql-bin.000002 | 9905 | Query | 6322494 | 9986 | BEGIN |
| mysql-bin.000002 | 9986 | Query | 6322494 | 10094 | use `db001`; UPDATE TB001 SET C2=2 WHERE C1=1 |
| mysql-bin.000002 | 10094 | Xid | 6322494 | 10125 | COMMIT /* xid=1904 */ |
+------------------+-------+------------+-----------+-------------+--------------------------------------------------------------------+

可以发现UPDATE操作被以STATEMENT格式进行记录。

====================================================

运维建议:

建议配置线上生产环境binlog_format=ROW,保证主从数据一致。

MySQL Binlog--MIXED模式下数据更新的更多相关文章

  1. MySQL Binlog Mixed模式记录成Row格式

    背景: 一个简单的主从结构,主的binlog format是Mixed模式,在执行一条简单的导入语句时,通过mysqlbinlog导出发现记录的Binlog全部变成了Row的格式(明明设置的是Mixe ...

  2. MySQL在ROW模式下通过binlog提取SQL语句

    Linux基于row模式的binlog,生成DML(insert/update/delete)的rollback语句通过mysqlbinlog -v 解析binlog生成可读的sql文件提取需要处理的 ...

  3. mysql 在row模式下truncate 与 delete 二进制日志记录的差异

    二进行日志的格式为row mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_nam ...

  4. EF.Mysql在codefirst模式下调用存储过程,和再DbFirst模式下的调用

    List<GetUserUpCrmList_Result> r = null; using (var context = new HimallContext()) { var parame ...

  5. Mysql的二进制日志binlog的模式说明

    binlog模式总共可分为以下三种:row,statement,mixed 1.Row日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value ...

  6. 转载-MySQL binlog三种模式及设置方法

    原文地址:http://www.cnblogs.com/yangliheng/p/6187327.html 1.1 Row Level  行模式 日志中会记录每一行数据被修改的形式,然后在slave端 ...

  7. mysql row日志格式下 查看binlog sql语句

    有时候我们需要使用row作为binlog的日志格式,即配置文件使用了binlog_format= row 参数 这样以来,我们在查看数据库binlog内容时候,就看不到增删改查的具体语句了,在数据库恢 ...

  8. MySQL binlog日志三种模式选择及配置

    在认识binlog日志三种模式前,先了解一下解析binlog日志的命令工mysqlbinlog.mysqlbinlog工具的作用是解析mysql的二进制binlog日志内容,把二进制日志解析成可以在M ...

  9. mysql binlog日志的三种模式

    1.statement level模式 每一条会修改数据的sql都会记录到master的bin-log中.slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行.优 ...

随机推荐

  1. java -jar 使用要点

    1.在将进程设为脱离终端运行时,输出流不能输出到当前窗口.否则,退出终端后,进程会pause.pause是停滞,是僵尸进程. 2.包含资源文件的war.jar文件是无法独立运行的.需要解压到临时目录. ...

  2. 第三节 java 函数的封装方法 以及 访问封装内容

    从我们的选择排序和冒泡排序里我们可以看到有很多相同的代码, 我们 可以把这些相同的代码提取出来封装为方法:比如我们的判 断交换和遍历输出: 抽取1: public static void PanDua ...

  3. JSONP解决跨域问题,什么是JSONP(转)

    原文链接:https://www.cnblogs.com/xinxingyu/p/6075881.html 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的 ...

  4. 编译varnish 报No package 'libpcre' found

    pcre的lib目录未指定 假如安装pcre的目录为/usr/local/pcre 那么lib目录为/usr/local/pcre/lib export PKG_CONFIG_PATH=/usr/lo ...

  5. 安装ubuntu不能引导win7

    台式机安装了ubuntu导致进不了win7了,2系统在同一硬盘. win7引导需要bootmgr和boot文件夹中的文件,2个东东在winows引导分区根目录下. 我的笔记本安装windows系统分区 ...

  6. Final发布

    作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2476] 文案+美工[https://www.cnblogs.com/erciy ...

  7. 九、编写led驱动

    led.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #i ...

  8. JavaScript , js 上下文(this 的指代)

    上下文 代表 this 变量的值, 以及 它的 指代; 它决定一个函数怎么被调用; 当一个函数作为一个对象的方法被调用的时候, this总是指向 调用这个方法的对象. ----- 1 ,情况一: 字面 ...

  9. 解决Could not open Hibernate Session for transaction; nested exception is java.lang.NoClassDefFoundError: org/hibernate/engine/transaction/spi/TransactionContext

    我使用的是5.2.8的hibernate的jar包,运行的时候却报错Could not open Hibernate Session for transaction; nested exception ...

  10. Java学习笔记13(equals()方法;toString()方法)

    equals()方法: equals方法是Object类中的方法:Object是所有类的祖宗,所以所有类都有equals()方法: boolean equals(Object obj); equals ...