返回顶部
首页 > 资讯 > 数据库 >MySQL binlog format三种形式介绍
  • 121
分享到

MySQL binlog format三种形式介绍

2024-04-02 19:04:59 121人浏览 薄情痞子
摘要

本文主要给大家简单讲讲Mysql binlog fORMat三种形式,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql binlog format三种

本文主要给大家简单讲讲Mysql binlog fORMat三种形式,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql binlog format三种形式这篇文章可以给大家带来一些实际帮助。

分析(本文碰到的案例):

查看Mysql binlog format

dba@192.168.111.4 : dba_test 02:33:39>show variables like 'binlog_format%';                                                                                                   +---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | MIXED |+---------------+-------+

测试语句:

dba@192.168.111.4 : dba_test 02:24:14>create table tmp_test(id int,name varchar(64),age int,primary key(id)) engine = innodb;
Query OK, 0 rows affected (0.05 sec)

dba@192.168.111.4 : dba_test 02:24:23>insert into tmp_test values(1,'aaa',11);
Query OK, 1 row affected (0.02 sec)

dba@192.168.111.4 : dba_test 02:25:17>insert into tmp_test values(2,'bbb',22);
Query OK, 1 row affected (0.02 sec)

dba@192.168.111.4 : dba_test 02:25:23>insert into tmp_test values(3,'ccc',33);
Query OK, 1 row affected (0.01 sec)

dba@192.168.111.4 : dba_test 02:25:28>insert into tmp_test values(4,'DDD',44);
Query OK, 1 row affected (0.01 sec)

dba@192.168.111.4 : dba_test 02:25:34>insert into tmp_test values(5,'eee',55);
Query OK, 1 row affected (0.01 sec)

dba@192.168.111.4 : dba_test 02:25:42>select * from tmp_test;+----+------+------+| id | name | age  |+----+------+------+|  1 | aaa  |   11 ||  2 | bbb  |   22 ||  3 | ccc  |   33 ||  4 | ddd  |   44 ||  5 | eee  |   55 |+----+------+------+5 rows in set (0.01 sec)

dba@192.168.111.4 : dba_test 02:25:50>create table tmp_test_bak(id int,name varchar(64),age int,primary key(id)) engine = innodb;
Query OK, 0 rows affected (0.03 sec)

dba@192.168.111.4 : dba_test 02:26:31>insert into tmp_test_bak select * from tmp_test;   ###记录成了Row模式Query OK, 5 rows affected (0.03 sec)
Records: 5  Duplicates: 0  Warnings: 0

Binlog 记录图:

MySQL binlog format三种形式介绍

问题来了,我想要出来的binlog format是Statement,而不是Row。而一条insert into tb select * from ta的简单语句在Mixed模式下记录了Row模式的binlog。原因是什么?

首先确实在一些特定的情况下,Mixed会被转换成Row模式:

. 当 DML 语句更新一个 NDB 表时;
. 当函数中包含 UUID() 时;
. 2 个及以上包含 AUTO_INCREMENT 字段的表被更新时;
. 执行 INSERT DELAYED 语句时;
. 用 UDF 时;
. 视图中必须要求运用 row 时,例如建立视图时使用了 UUID() 函数;

上面来自网络,有兴趣的可以自己测试测试。而对于本文中的sql,符合不了上面的条件,但binlog也记录成了Row格式。所以还是很奇怪为什么binlog格式被转换了,日常工作的时候有遇到过执行一条sql,会报一个warning:

Warning: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT

难道因为这个导致转换的?因为上面的SQL可以重现,没有报warning,所以这个情况排除。根据经验想到了一个参数:innodb_locks_unsafe_for_binlog,看到里面讲到事务隔离级别,那就看看隔离级别的情况:

dba@192.168.111.4 : dba_test 05:46:56>select @@global.tx_isolation;+-----------------------+| @@global.tx_isolation |+-----------------------+| READ-COMMITTED        |+-----------------------+1 row in set (0.01 sec)

dba@192.168.111.4 : dba_test 06:36:45>select @@session.tx_isolation;+------------------------+| @@session.tx_isolation |+------------------------+| READ-COMMITTED         |+------------------------+1 row in set (0.01 sec)

看到隔离级别是提交读,即不可重复读。把事务隔离级别设置成默认的 REPEATABLE READ:

dba@192.168.111.4 : dba_test 06:41:02>set session transaction isolation level REPEATABLE READ;                                                                              
Query OK, 0 rows affected (0.14 sec)

dba@192.168.111.4 : dba_test 06:41:42>select @@session.tx_isolation;+------------------------+| @@session.tx_isolation |+------------------------+| REPEATABLE-READ        |+------------------------+1 row in set (0.00 sec)

再执行测试里的SQL,发现这时候Mixed的binlog记录了Statement格式,正常了,符合预期了。难道就是这个事务隔离级别的问题引起的?在手册里发现了这句:

NoteIn MySQL 5.7, when READ COMMITTED isolation level is used, or the deprecated innodb_locks_unsafe_for_binlog system variable is enabled, 
there is no InnoDB gap locking except for foreign-key constraint checking and duplicate-key checking. Also, record locks for nonmatching 
rows are released after MySQL has evaluated the WHERE condition.

If you use READ COMMITTED or enable innodb_locks_unsafe_for_binlog, you must use row-based binary logging.

展开可以看例子:

MySQL binlog format三种形式介绍 View Code

经过测试,在5.1、5.5、5.6都有这个情况,可能这个本身就不是问题。:)

MySQL binlog format三种形式就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的数据库。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL binlog format三种形式介绍

本文链接: https://lsjlt.com/news/36715.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL binlog format三种形式介绍
    本文主要给大家简单讲讲MySQL binlog format三种形式,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望MySQL binlog format三种...
    99+
    2024-04-02
  • MySQL Binlog三种格式介绍及分析
    一.Mysql Binlog格式介绍 MySQL binlog日志有三种格式,分别为Statement,MiXED,以及ROW! 1.Statement:每一条会修改数据的sql都会记...
    99+
    2024-04-02
  • mysql三种安装方式介绍
    这篇文章主要讲解了“mysql三种安装方式介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql三种安装方式介绍”吧! MYSQL版本介绍 ...
    99+
    2024-04-02
  • mysql 的binlog format格式种类及分析
    一.Mysql Binlog格式介绍 Mysql binlog日志有三种格式,分别为Statement,MiXED,以及ROW!1.Statement:每一条会修改数据的sql都会记录在binlog中。优点...
    99+
    2024-04-02
  • MySQL binlog中三种事件类型XID_EVENT、ROTATE_EVENT及STOP_EVENT介绍
    下面讲讲关于MySQL binlog中三种事件类型XID_EVENT、ROTATE_EVENT及STOP_EVENT介绍,文字的奥妙在于贴近主题相关。所以,闲话就不谈了,我们直接看下文吧,相信看完MySQL...
    99+
    2024-04-02
  • binlog的三种模式
    binlog的三种模式statement模式特点:(1)此模式不支持RU,RC隔离级别;(2)binglog日志文件中上一个事物的结束点是下一个事物的开始点;(3)DML,DDL语句都会明文显示;(4)对一...
    99+
    2024-04-02
  • binlog日志的三种模式
    statement level模式       每一条会修改数据的sql都会记录到master的bin-log中。Slave在复制的时候sql进程...
    99+
    2024-04-02
  • mysql锁之三种行级锁介绍
    本文主要介绍 1.mysql三种行锁介绍 2.RR模式下,next-key lock为什么可以解决幻读问题 首先,创建一张表: mysql> show create table test0...
    99+
    2024-04-02
  • MySQL中binlog三种格式的优缺点是什么
    这篇文章将为大家详细讲解有关MySQL中binlog三种格式的优缺点是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 MySQL bin...
    99+
    2024-04-02
  • mysql日志系统redolog和binlog介绍
    首先,我们先来看看一次查询/更新语句流程图 本文会将重点放在执行器<->存储引擎之间的交互。 mysql不是每次数据更改都立刻写到磁盘,而是会先将修改后的结果暂存在内存...
    99+
    2024-04-02
  • 介绍几种MySQL常见的图形化工具
    MySQL作为一款非常流行的、开源的关系型数据库,应用非常广泛。因为MySQL开源的缘故,图形化管理维护工众多,除了系统自带的 命令行管理工具之外,还有许多其他的图形化管理工具,这里介绍几个经常使用...
    99+
    2024-04-02
  • php7 fpm三种模式static、dynamic和ondemand的介绍
    这篇文章主要介绍“php7 fpm三种模式static、dynamic和ondemand的介绍”,在日常操作中,相信很多人在php7 fpm三种模式static、dynamic和ondemand的介绍问题上存在疑惑,小编查阅了各式资料,整理...
    99+
    2023-06-20
  • JAVA多线程实现的三种方式介绍
    本篇内容主要讲解“JAVA多线程实现的三种方式介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA多线程实现的三种方式介绍”吧!JAVA多线程实现方式主要有三种:继承Thread类、实现R...
    99+
    2023-06-02
  • 介绍三种查看MySQL字符集的方法
    MySQL字符集设置 系统变量: – character_set_server:默认的内部操作字符集 – character_set_client:客户端来源数据使用的字符集 – charact...
    99+
    2024-04-02
  • AndroidStudio格式化(Format)代码快捷键介绍
    目录Android Studio格式化(Format)代码快捷键Android Studio 常用快捷键整理调换格式快速出代码查看类和方法全局类操作总结Android Studio格...
    99+
    2023-01-17
    Android Studio格式化 Android Studio快捷键 Android代码快捷键
  • Mysql-主从-binlog-格式,参数(三)
    日志格式 ROW: 基于【数据行】的模式,就是把所有变化的数据记录下来: 优点: 稳定不会有bug 缺点: 日志文件大 STATEMENT: 基于【sql语句】的模式,就是把所有的执行的sq...
    99+
    2024-04-02
  • python 开发的三种运行模式详细介绍
    Python 三种运行模式 Python作为一门脚本语言,使用的范围很广。有的同学用来算法开发,有的用来验证逻辑,还有的作为胶水语言,用它来粘合整个系统的流程。不管怎么说,怎么使用python既取决于你...
    99+
    2022-06-04
    三种 详细介绍 模式
  • .NET异步编程模式的三种类型介绍
    一、引言 .NET中很多的类、接口在设计的时候都考虑了多线程问题,简化了多线程程序的开发,不用自己去写WaitHandler等这些底层的代码,由于历史的发展,这些类的接口设计有着三种...
    99+
    2024-04-02
  • CZGL.ProcessMetrics处理监控数据的三种方式介绍
    目录导读三种方式处理监控数据主动推送ASP.NET Core自定义URL.NET diagnostics自定义监控指标导读 CZGL.ProcessMetrics 是一个 Metri...
    99+
    2024-04-02
  • Vue网络请求的三种实现方式介绍
    目录1.XMLHttpRequest发送请求2.fetch发送请求3.axios请求库(Vue中推荐写法)模拟发送get和post请求网络请求时发送用户认证信息请求拦截器响应拦截器用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作