mysql中的binlog

news2025/1/15 13:14:50

目录标题

  • 前言
    • binlog有两个常用的使用场景
  • 常用的binlog日志操作命令
    • 查看所有binlog日志列表 【show master logs;】
    • 查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值。【show master status;】
    • flush 刷新log日志,自此刻开始产生一个新编号的binlog日志文件;【flush logs;】
    • 重置(清空)所有binlog日志  【reset master;】
  • binlog文件
    • statement:基于 SQL 语句的复制。
    • row:基于行的复制,记录每行实际数据的变更。
    • mixed:在该模式下,MySQL会根据执行的每一条具体的sql语句来灵活选择记录格式。一般的语句修改使用statment格式来提高性能,在遇到一些statement无法完成主从复制的操作时,则采用row格式保存binlog。
  • binlog与redolog的区别
  • binlog与redolog一致性问题:2PC
    • Mysql的两阶段提交

前言

MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。(需要注意的一点是,即便update操作没有造成数据变化,也是会记入binlog。)
一般来说开启binlog日志大概会有1%的性能损耗。

DDL:主要的命令有create、alter、drop等,ddl主要是用在定义或改变表(table)的结构,数据类型,表之间的连接和约束等初始工作上,他们大多在建表时候使用。
DML:主要命令是slect,update,insert,delete,就像它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言

binlog有两个常用的使用场景

主从复制:mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
数据恢复:通过mysqlbinlog工具来恢复数据。

常用的binlog日志操作命令

查看所有binlog日志列表 【show master logs;】

在这里插入图片描述

查看master状态,即最后(最新)一个binlog日志的编号名称,及其最后一个操作事件pos结束点(Position)值。【show master status;】

在这里插入图片描述

flush 刷新log日志,自此刻开始产生一个新编号的binlog日志文件;【flush logs;】

注意:每当mysqld服务重启时,会自动执行此命令,刷新binlog日志;在mysqlddump备份数据时加-F选项也会刷新binlog日志;

重置(清空)所有binlog日志  【reset master;】

binlog文件

MySQL5.1版本之前,binlog的记录格式都是基于SQL语句的statement格式。5.1版本后开始引入binlog_format参数,该参数可设的值也增加到了3种:statement,row,mixed.

statement:基于 SQL 语句的复制。

优点:binlog日志量占用小,节约了IO,提高性能。
缺点:对一些系统函数不能准确复制或不能复制,如now()、uuid()等。

row:基于行的复制,记录每行实际数据的变更。

优点:复制过程准确,不会出现某些特定情况下的存储过程,函数,以及触发器的调用和触发无法被正确复制的问题。
缺点:大量增加binlog的磁盘占用,在一些大表中清除大量数据时在 binlog 中会生成很多条语句,可能导致从库延迟变大。

mixed:在该模式下,MySQL会根据执行的每一条具体的sql语句来灵活选择记录格式。一般的语句修改使用statment格式来提高性能,在遇到一些statement无法完成主从复制的操作时,则采用row格式保存binlog。

优点:综合其他两种模式的特点,准确性强,文件大小适中。
缺点:可能导致主从不一致。

binlog与redolog的区别

binlog 是 MySQL 的 Server 层实现的,所有的引擎都是可以的redo log 是 InnoDB 引擎特有的
binlog 是逻辑日志,比如” 给 id = 2 这一行的 c 字段加 1”redo log 是物理日志,记录的是”在 XXX 页上做了 XXX 修改”
binglog 是事务提交的时候一次性写入数据首先会被\写入到redolog buffer,事务每次提交都会将 redo log buffer 中的日志写入 os buffer 并调用 fsync() 刷到 redo log file 中
binlog 是可以追加写入的redo log 是有固定大小的,所以它的空间会用完,如果用完的话,一定要进行一些写入磁盘的操作才可以继续

binlog与redolog一致性问题:2PC

在这里插入图片描述

  1. 执行器先找引擎取 ID=2 这一行。ID 是主键,引擎直接用树搜索找到这一行。如果 ID=2这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。
  2. 执行器拿到引擎给的行数据,把这个值加上1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。
  3. 引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare状态。然后告知执行器执行完成了,随时可以提交事务。 【写入 redo log(处于 prepare 阶段)】
  4. 执行器生成这个操作的 binlog,并把 binlog 写入磁盘。【写 binlog】
  5. 执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。【提交事务(处于 commit 状态)】

Mysql的两阶段提交

在这里插入图片描述

上面的流程采用了两阶段提交,那为什么要采用两阶段提交呢?是为了让 binlog 和 redo log 之间的逻辑一致。

我们假设一下上面的 update 语句在执行的每个时刻,MySQL 崩溃了,看一下两个日志间的逻辑是如何保持一致的。
假设在步骤3前,MySQL崩溃重启,那么事务提交失败,不会影响数据。虽然更新了内存,但崩溃后,内存会丢失。
假设在步骤3完成后崩溃,此时已经写入 redo log 了,重启后,发现 redo log 处于 prepare 阶段,就不恢复。
假设在步骤4完成后崩溃,此时已经写入 binlog 了,重启后,发现 binlog 已经写入了,就把对应的 redo log 改为 commit 状态。
这样就能保证 redo log 和 binlog 的逻辑一致性。

两阶段提交是跨系统维持数据逻辑一致性时常用的一个方案。
在这里插入图片描述

常用的binlog日志操作命令:https://blog.csdn.net/sinat_32430939/article/details/121533785
区别:https://blog.csdn.net/qq_45243783/article/details/125040675
一致性问题:https://blog.csdn.net/yzx3105/article/details/130685375

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Net跨平台UI框架Avalonia入门-安装和使用

Avalonia UI是是Net的跨平台UI框架,支持 Windows、Linux、iOS 和 Android,与Net其他UI框架相比,主要是支持Linux。在国产化的需求下,对于C#开发的程序员,Avalonia适合用来开发Linux的桌面客户端。 Avalonia 安装 安装…

SpringBoot——日志

简单介绍: 在我们的程序开发中,日志的存在是必不可少的,日志可以帮助我们观察程序的运行过程,报错信息,各种警告,在我们调试程序的时候起到了非常大的作用。那么在SpringBoot中,我们在每次启动…

6.4.1最小生成树(Prim和kruskal算法)

生成树的概念: 连通图的生成树是包含图中全部顶点的一个极小连通子图 (边尽可能的少,但要保持连通) 若图中顶点数为n,则它的生成树中含有n-1条边。对于生成树而言,若看去他的一条边,则会变成…

软件测试太卷了,三个练手的软件测试实战项目偷偷提升自己(附全套视频跟源码)

项目一:12306抢票项目 项目测试目的 学会Selenium定位web元素的方法 熟练浏览器调试工具使用 项目主体步骤 1) 人工走一遍流程,对自动化的流程心中有数 2) 按步骤拆分,然后对每一个小步骤编写自动化脚本 3&#xf…

1.8G专网5G工业路由器助力智能电网-电力物联网方案

随着智能电网的普及与使用,电力终端的数量也日益剧增,由于间距较远、位置偏僻的特性,造成监管难、效率低、成本高等管理维护难题。 5G的价值也体现了由实验室走向垂直行业应用,赋予各行各业高效组网、高速用网的应用体验。智联物联…

PowerBi连接MySQL提示需安装组件才能使用,本人删去已经下载好的组件,再做一份详细教程。

问题 当我们用PowerBi连接Mysql时候,他突然提示我们需要安装组件。 解决 检查自己的MySQL版本 打开cmd运行框,输入命令mysql -uroot -p,再输入数据库密码 输入select version(); 我这里是8.0.16版本,记住自己的版本号 下载 mysql connector https:/…

在 EKS 上部署 HummerRisk

HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生环境的安全和治理问题。核心能力包括混合云的安全治理和容器云安全检测。本文讲介绍如何在 EKS 上部署 HummerRisk。 EKS 简介 Amazon Elastic Kubernetes Service(Amazon EKS)…

python创建用户界面之PyQt5的使用

首先我们winR输入cmd 有两种方法下载PyQt5 方法一: pip install PyQt5 pip install PyQt5-tools 方法二: pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools -i https://pypi.douban.com/simple 下载好了之后我们打开 Pych…

idea热部署插件JRebel激活(强烈推荐,试试就离不开了)

JRebel可以实现在idea中热部署项目,修改后不用重启项目,让开发更丝滑。 JRebel需要激活才可以正常使用。 一、快速使用 1、idea安装JRebel插件。 File>Settings>Plugins 搜索JRebel 2、激活 1)填写激活信息 个人部署的注册服务器&…

加密解密软件VMProtect教程(七):主窗口之控制面板“详情”部分

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic(本机)、Virtual Pascal和XCode编译器。 同时,VMProtect有一个内置的反汇编程序,可以与Windows和Mac OS X可执行文件一起…

低代码与其拓荒,不如颠覆开发行业

目录 一、前言 二、低代码是一个值得信赖的“黑盒子” 粗略总结,开发者对低代码平台所见即所得设计器有两种反应: 三、人人都爱黑盒子 四、用“低代码平台”来开发是什么样的感受? 五、结论 一、前言 在科幻电影中,我们看到…

图片去底色,让您的产品瞬间脱颖而出

在现代社会中,图片是我们不可或缺的一部分,在各行业中都有着非常重要的作用。但是,有时候我们需要将某些图片中的背景去除,以便更好地突出主体,这时候,图片去底色就起到了非常重要的作用。 图片去底色的优…

论文、专利、文献检索及图像数据工具总结

一、文献检索 1、中文文献检索参考 中文文献途径网址用途1知网https://www.cnki.net/文献检索、下载2万方数据网https://www.wanfangdata.com.cn/文献检索、下载3维普期刊http://lib.cqvip.com/文献检索、下载4浙江图书馆https://www.zjlib.cn/#searchs_1_div文献检索、下载5…

一站式数据分析学习,让你成为一名合格的数据分析师

一站式数据分析学习,让你成为一名合格的数据分析师 随着数字化时代的到来,数字经济已然成为了新的发展潮流,数据的重要性越发显著。加上大数据、人工智能、云计算等数字技术的发展,让数字化时代的步伐迈得更快,目前已经…

为减少来自环境使用的无线传感器网络的传输次数而开发的方法(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 随着无线传感器网络(Wireless Sensor Network,WSN)的广泛应用,业界开始应用环境能量收集技术解决传感器节点的能量补充问题。而…

template和component自定义组件之间的区别

在小程序中自定义组件 component 方式和组件模板 template 2种方式实现页面组件化。 一、component自定义组件 1.概念 自定义组件是指可以被多个页面使用的组件,可以在小程序中多次复用。在开发中可以将一个页面中的代码和样式抽象出来,然后创建一个自定…

百汇BCR:如何参与外汇交易?哪个交易时间更好?

外汇市场时连续24小时运转的,也就是说随时都可以参与交易。那不同的交易时间进场是否会影响交易结果?哪个时间参与交易更好? 一、国际主要市场外汇交易时间(北京时间) 新西兰惠灵顿外汇市场:04&#xff1a…

基于微信小程序的新冠疫苗预约系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:微信小程序 && Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项…

ABAP OOALV模板(Custom Control)

该方法OOALV需要将ALV置入屏幕上的自定义控件中 alv较少时具有代码可读性可维护性高的特点,实现起来较为简单,但由于custom control固定了位置所以无法动态拖拽边框 创建报表程序后通过se80对象浏览器新建屏幕9001 点击布局进入屏幕制作器界面 将custom…

Cy5.5-PEG2000-NHS; NHS-PEG-Cy5.5,活性荧光标记材料,可用于标记抗体多肽

CY5.5-PEG-NHS,CY5.5-聚乙二醇-活性酯 中文名称:CY5.5-聚乙二醇-活性酯 英文名称:CY5.5-PEG-NHS 性状:粉末或固体,取决于分子量 溶剂:溶于水和大部分常规有机溶剂 分子量:1k、2k、3.4k、5k…