Mysql binlog 日志

2023-11-11

Mysql binlog 日志

一. Binlog格式介绍  

模式1 Row:日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。

优点:
row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以row level的日志内容会非常清楚的记录下每一行数据修改的细节。且不会出现某些特定情况下的存储过程,或function,以及 trigger的调用和触发无法被正确复制的问题。

缺点:
row level模式下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如有这样一条update语句:update product set owner_member_id = ‘b’ where owner_member_id = ‘a’,执行之后,日志中记录的不是这条update语句所对应额事件(MySQL以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多个事件。自然,bin-log日志的量就会很大。尤其是当执行alter table之类的语句的时候,产生的日志量是惊人的。因为MySQL对于alter table之类的表结构变更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重建了整个表。那么该表的每一条记录都会被记录到日志中。

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

优点:
statement level下的优点首先就是解决了row level下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约IO,提高性能。因为他只需要记录在Master上所执行的语句的细节,以及执行语句时候的上下文的信息。

缺点:
由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端杯执行的时候能够得到和在master端执行时候相同的结果。另外就是,由于MySQL现在发展比较快,很多的新功能不断的加入,使MySQL得复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会造成MySQL的复制出现问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如:sleep()函数在有些版本中就不能真确复制,在存储过程中使用了last_insert_id()函数,可能会使slave和master上得到不一致的id等等。由于row level是基于每一行来记录的变化,所以不会出现类似的问题。

模式3 Mixed:可以理解为是前两种模式的结合。一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog。
Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。
新版本中的Statment level还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。

Mixed日志说明:

在slave日志同步过程中,对于使用now这样的时间函数,MIXED日志格式,会在日志中产生对应的unix_timestamp()*1000的时间字符串,slave在完成同步时,取用的是sqlEvent发生的时间来保证数据的准确性。另外对于一些功能性函数slave能完成相应的数据同步,而对于上面指定的一些类似于UDF函数,导致Slave无法知晓的情况,则会采用ROW格式存储这些Binlog,以保证产生的Binlog可以供Slave完成数据同步。


在配置文件中的参数:
 

log-bin=mysql-bin
#binlog_format=”STATEMENT”
#binlog_format=”ROW”
binlog_format=”MIXED”

运行时在线修改参数也是可以的:
 

mysql> SET SESSION binlog_format = ‘STATEMENT’;
mysql> SET SESSION binlog_format = ‘ROW’;
mysql> SET SESSION binlog_format = ‘MIXED’;
mysql> SET GLOBAL binlog_format = ‘STATEMENT’;
mysql> SET GLOBAL binlog_format = ‘ROW’;
mysql> SET GLOBAL binlog_format = ‘MIXED’;
 

二.Binlog基本配制与格式设定

1.基本配制

Mysql BInlog日志格式可以通过mysql的my.cnf文件的属性binlog_format指定。如以下:

binlog_format           = MIXED                 //binlog日志格式

log_bin                  =目录/mysql-bin.log    //binlog日志名

expire_logs_days    = 7                //binlog过期清理时间

max_binlog_size    100m                    //binlog每个日志文件大小

2.Binlog日志格式选择

Mysql默认是使用Statement日志格式,推荐使用MIXED.

由于一些特殊使用,可以考虑使用ROWED,如自己通过binlog日志来同步数据的修改,这样会节省很多相关操作。对于binlog数据处理会变得非常轻松,相对mixed,解析也会很轻松(当然前提是增加的日志量所带来的IO开销在容忍的范围内即可)。

3.mysqlbinlog格式选择

mysql对于日志格式的选定原则:如果是采用 INSERT,UPDATE,DELETE 等直接操作表的情况,则日志格式根据 binlog_format 的设定而记录,如果是采用 GRANT,REVOKE,SET PASSWORD 等管理语句来做的话,那么无论如何 都采用 SBR 模式记录


三.Binlog日志分析

通过MysqlBinlog指令查看具体的mysql日志,如下:

///

SET TIMESTAMP=1350355892/*!*/;

BEGIN

/*!*/;

# at 1643330

#121016 10:51:32 server id 1  end_log_pos 1643885        Query     thread_id=272571   exec_time=0   error_code=0

SET TIMESTAMP=1350355892/*!*/;

Insert into T_test….)

/*!*/;

# at 1643885

#121016 10:51:32 server id 1  end_log_pos 1643912        Xid = 0

COMMIT/*!*/;

///

1.开始事物的时间:

SET TIMESTAMP=1350355892/*!*/;

BEGIN

2.sqlevent起点

#at 1643330 :为事件的起点,是以1643330字节开始。

3.sqlevent 发生的时间点

#121016 10:51:32:是事件发生的时间,

4.serverId

server id 1 :为master 的serverId

5.sqlevent终点及花费时间,错误码

end_log_pos 1643885:为事件的终点,是以1643885 字节结束。

execTime 0: 花费的时间

error_code=0:错误码

Xid:事件指示提交的XA事务

 

四.Binlog相关参数

log_bin设置此参数表示启用binlog功能,并指定路径名称
log_bin_index设置此参数是指定二进制索引文件的路径与名称
binlog_do_db表示只记录指定数据库的二进制日志
binlog_ignore_db表示不记录指定的数据库的二进制日志
max_binlog_cache_size表示binlog使用的内存最大的尺寸
binlog_cache_size表示binlog使用的内存大小,可以通过状态变量binlog_cache_usebinlog_cache_disk_use来帮助测试
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量

max_binlog_sizeBinlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束

sync_binlog这个参数直接影响mysql的性能和完整性

sync_binlog=0:当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘        同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。

sync_binlog=n在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。Mysql中默认的设置是sync_binlog=0,即不作任何强制性的磁盘刷新指令,这时性能是最好的,但风险也是最大的。一旦系统绷Crash,在文件系统缓存中的所有Binlog信息都会丢失

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql binlog 日志 的相关文章

  • Linux基础开发工具

    提示 本文内容较长 请参考左侧目录阅读 Linux基础开发工具 1 软件包管理器yum 1 1 yum的基本操作 1 2 关于lrzsz 2 Linux编辑器vim 2 1 安装vimforcpp插件 2 2 修改vim配置 2 3 常见错
  • Qt限制LineEdit的输入

    要限制输入需要用到Validator才能限制QLineEdit的输入 具体的两种表现方式 第一种是利用正则表达式QRegExp 例如下图所示 QRegExp rx1 QRegExp 0 9 正则表达式 限制数字与点的输入 QValidato
  • 常用七种排序的python实现--

    常用七种排序的python实现 1 算法复杂度 算法复杂度分为时间复杂度和空间复杂度 其中 时间复杂度是指执行算法所需要的计算工作量 而空间复杂度是指执行这个算法所需要的内存空间 算法的复杂性体现在运行该算法时的计算机所需资源的多少上 计算
  • 什么是区块链概念

    只有少数人控制的比特币世界没有任何意义 比特币的价值也不是孤立存在的 与不同世界 至少包含现实实体经济和区块链世界 的关联性越强 就越能体现其价值 一方面 与现实世界的关系 当与比特币挂钩的商品和服务越来越多之后 也即是许多商品和服务都以比
  • TypeError: ‘module‘ object is not callable python报错解决及问题分析

    目录 代码片段 ExcelReader py test py 报错 原因分析 模块 import使用方法 1 导入整个模块 2 导入整个模块并指定别名 3 from import 语法来导入指定成员 4 from import 语法来导入指

随机推荐

  • SQL Server 2014安装教程(保姆级图解教程)

    SQL Server 2014安装教程 保姆级图解教程 1 找到准备好的SQL Server 2014安装包 2 解压缩后找到安装程序 双击打开 3 点击全新SQL Server 单击后会出现安装窗口 4 勾选接受许可条款 点击下一步 5
  • Sharding-JDBC分布式事务之(五)BASE事务(Seata框架——AT模式的启动)

    Seata框架启动 Seata框架 AT模式的启动 1 服务中心为nacos方式启动seata 1 1 nacos启动与建表 1 2 registry conf 1 3 客户端 TM RM 配置 2 服务中心为file 直连 方式启动sea
  • springCloud微服务系列——分布式日志采集

    目录 一 简介 二 思路 三 自定义Logback appender 属性注入 Logback标签注入属性 Spring配置信息注入属性 Logback代码注入属性 Elasticsearch模板设计 示例代码 一 简介 分布式应用必须有一
  • [附源码]SSM计算机毕业设计基于web场馆预约管理系统JAVA

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • Java的HttpServletResponse对象使用(请求和响应)

    一 学习目标 1 HttpServletResponse对象 2 HttpServletResponse应用 3 RequestDispatcher接口 二 重点知识 Servlet最主要的作用就是处理客户端请求 并向客户端做出响应 为此
  • 2021-10-04

    Centos 7安装Notepad 安装snap sudo yum install epel release sudo yum install snapd sudo systemctl enable now snapd socket sud
  • 使用TWRP Recovery刷入CM13等第三方ROM教程

    http www miui com thread 4492914 1 1 html 首先 可以使用论坛里发布的中文TWRP或者我改的http www miui com forum php mo page 1 pid124770869里的中文
  • 巧解高并发之消息压缩

    随着互联网的发展 高并发问题几乎是每个企业都会面临的问题 而目前解决高并发最受欢迎的便是微服务 通过类似于增加服务器数量而达到一种 人多力量大的 效果 而解决这类问题除了增加 人 的数量 还可以精简任务 降低繁琐度 那么目标就到了消息上 既
  • 量化投资学习——一些牛比的量化投资公司

    Jane Street Jane Street是华尔街最神秘的交易公司 以关注科技和股票交易而闻名 去年他们总交易额达到了5万亿美元 Jane Street公司成立于2000年 目前拥有600多名员工 每天股权交易量高达130亿美元 有消息
  • 多线程造成的资源以及系统状态问题 ==> 多线程造成状态混乱 :参考文章

    为什么80 的码农都做不了架构师 gt gt gt 实战体会Java多线程编程精要 在 Java 程序中使用多线程要比在 C 或 C 中容易得多 这是因为 Java 编程语言提供了语言级的支持 本文通过简单的编程示例来说明 Java 程序中
  • jeesite图片上传并显示

    前几天大哥叫我搞个这的需求出来 上传图片并展示出来 并且后台对图片进行裁剪上传 前端传来的图片是个base64的编码 格式的图片 点击新增 点击上传图片 可进行裁剪 然后上传并且展示出来 前端form页面附上 记住 path路径一定要对上
  • jmeter

    我整理了一下性能测试的一些常见指标 大家看看还有没有需要完善的 性能测试是评估系统在特定工作负载下的能力和可靠性的过程 常见的性能测试指标包括以下几种 1 响应时间 Response Time 系统从接收请求到返回响应所需的时间 2 吞吐量
  • 一文读懂运放规格书参数(2)

    1 电源抑制比 Power supply rejection ratio PSRR 定义 双电源供电电路中 保持负电源电压不变 输入不变 而让正电源产生变化幅度为 VS 频率为 f 的波动 那么在输出端会产生变化幅度为 Vout 频率为 f
  • IEEEE trans模板中怎么使用algorithm2e

    IEEEE trans模板中怎么使用algorithm2e 本文主要记录如何在IEEEE trans模板中使用algorithm2e 避免踩坑 找不到解决方案 目录 IEEEE trans模板中怎么使用algorithm2e 1 注释掉该注
  • 2003系统internet信息服务器,WindowsServer2003创建和管理Internet信息服务器.docx

    F图 F图 Windows Server 2003 实训报告 班级 软件设计10 2姓名学号得分 实训九 创建和管理In ternet信息服务器 实训目的 掌握Web FTP服务器的配置 实训环境 1 装有 Windows Server 2
  • pssh远程批量执行命令

    Pssh pssh是python写的可以并发在多台机器上批量执行命令的工具 它的用法可以媲美ansible的一些简单用法 执行起来速度比ansible快它支持文件并行复制 远程命令执行 杀掉远程主机上的进程等等 杀手锏是文件并行复制 当进行
  • 【Spring Boot】详解restful api

    目录 1 restful api 1 1 历史 1 2 内容 1 3 传参 2 Spring Boot中的Restful Api 1 restful api 1 1 历史 RESTful API Representational State
  • netty入门实例

    Netty 5用户指南 http ifeve com netty5 user guide Netty是一个NIO框架 使用它可以简单快速地开发网络应用程序 比如客户端和服务端的协议 Netty大大简化了网络程序的开发过程比如TCP和UDP的
  • PCL 获取格网最低点(C++详细过程版)

    格网最低点 一 概述 二 代码实现 三 结果展示 1 原始点云 2 滤波结果 一 概述 获取格网最低点在PCL里有现成的调用函数 具体算法原理和实现代码见 PCL GridMinimum获取栅格最低点 为充分了解GridMinimum算法实
  • Mysql binlog 日志

    Mysql binlog 日志 一 Binlog格式介绍 模式1 Row 日志中会记录成每一行数据被修改的形式 然后在slave端再对相同的数据进行修改 优点 row level模式下 bin log中可以不记录执行的sql语句的上下文相关