Binlog日志详解

news2024/11/16 19:39:11

binlog基本概念

binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如:更改数据库表和更改内容的SQL语句都会记录到binlog里,但是不会记录SELECT和SHOW这类操作

binlog的特点

  • binlog在MySQL的Server层实现(引擎共用)
  • binlog为逻辑日志,记录的是一条SQL语句的原始逻辑
  • binlog不限制大小,追加写入,不会覆盖以前的日志
  • 默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysqlbinlog解析查看

开启Binlog日志有以下两个最重要的使用场景

  • 主从复制:在主库中开启binlog功能,这样主库就可以把Binlog传递给从库,从库拿到binlog后实现数据恢复达到主从数据一致性
  • 数据恢复:通过mysqlbinlog工具来恢复数据

binlog日志的三种模式

  • row: 日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改

    优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。而且不会出现某些特定情况下存储过程或function,以及trigger的调用和触发器无法被正确复制的问题

    缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨

  • statement:记录每一条修改数据的SQL语句(批量修改时,记录的不是单条SQL语句,而是批量修改的SQL语句事件), slave在复制的时候SQL进程会解析成和原来master端执行过相同的SQL再次执行。简称SQL语句复制

    优点:日志量小,减少磁盘IO,提升存储和恢复速度

    缺点:在某些情况下会导致主从数据不一致,比如last_insert_id()、now()等函数
    在这里插入图片描述

  • mixed:以上两种模式的混合使用,一般会使用statement模式保存binlog,对于statement模式无法复制的操作时,使用row模式保存binlog,MySQL会根据执行的SQL语句选择写入模式

企业场景如何选择binlog的模式

  • 如果生产中使用MySQL的特殊功能相对少(存储过程、触发器、函数)。选择默认的语句模式statement
  • 如果生产中使用MySQL的特殊功能较多的,可以选择mixed模式
  • 如果生产中使用MySQL的特殊功能较多,又希望数据最大化一致,此时最好Row 模式;但是要注意,该模式的binlog日志量增长非常快

binlog写入机制

  • binlog文件结构

    MySQL的binlog文件中记录的是对数据库的各种修改操作,用来表示修改操作的数据结构是Log event。不同的修改操作对应的不同的log event , 比较常用的log event有: Query event 、 Row event 、 Xid event 等。binlog文件的内容就是各种Log event的集合
    在这里插入图片描述

  • binlog落盘策略

    binlog 的写入顺序: binlog cache (write) -> OS cache -> (fsync) disk

    write表示: 写入文件系统缓存,fsync表示持久化到磁盘的时机

    binlog刷数据到磁盘由参数sync_binlog进行配置

    • sync_binlog=0 的时候,表示每次提交事务都只 write,不 fsync
    • sync_binlog=1 的时候,表示每次提交事务都会执行 fsync
    • sync_binlog=N(N>1) 的时候,表示每次提交事务都 write,但累积 N 个事务后才 fsync
  • binlog 写入流程
    在这里插入图片描述

    • 根据记录模式和操作触发event事件生成log event
    • 事务执行过程中,先把日志(log event) 写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中
    • binlog cache,系统为每个线程分配了一片binlog cache内存 (每个线程都有自己的binlog cache,共用一份binlog文件)
    • 事务提交的时候,执行器把binlog cache里完整的事务写入binlog中。并清空binlog cache

redo log 和 binlog的区别

  • redo log是InnoDB引擎特有的;binlog是MySQL的Server层实现的,所有引擎都可以使用
  • redo log是物理日志,记录的是“在XXX数据页上做了XXX修改”;binlog是逻辑日志,记录的是原始逻辑,其记录是对应的SQL语句
  • redo log是循环写的,空间一定会用完,需要write pos和check point搭配;binlog是追加写,写到一定大小会切换到下一个,并不会覆盖以前的日志
  • redo log作为服务器异常宕机后事务数据自动恢复使用,binlog可以作为主从复制和数据恢复使用。binlog没有自动crash-safe能力

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

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

相关文章

电路基础(第一章电路模型和电路定律)

第一章 电路模型和电路定律 简介: 电路基础第一篇知识笔记,在书上抄,在网上找,总之把基础的东西搞懂。近期要恶补一下基础了,谁想工作的时候天天被骂啊,弄啥啥不会。开卷。 学习教程参考教材《电路》——邱…

【NLP开发】Python实现聊天机器人(ChatterBot,集成前端页面)

🍺NLP开发系列相关文章编写如下🍺: 🎈【NLP开发】Python实现词云图🎈🎈【NLP开发】Python实现图片文字识别🎈🎈【NLP开发】Python实现中文、英文分词🎈🎈【N…

关于说服(一)

首先有一个原则:没有人喜欢被改变 不好的话术反而会引起别人的抵触心理 为避免触发反抗机制,可以稍微改变一下话术:将 “你应该” 改为 “我需要”** 没人喜欢说教者 说教者常用句式 1 你为什么不肯去试一试 ->(隐喻) 你在逼别人复习反…

复刻ChatGPT语言模型系列-(一)基座模型选取

前言 今天开始我将会推出一系列关于复刻ChatGPT语言模型的博文。本系列将包括以下内容: 复刻ChatGPT语言模型系列-(一)基座模型选取复刻ChatGPT语言模型系列-(二)参数高效微调复刻ChatGPT语言模型系列-(三…

玩机搞机--定制系统 编译系统选项 隐藏设置 关闭app联网 增加设置选项

在接待一些定制rom的过程中。对于有些客户的有些要求作出对应的系统编译操作选项。例如 1-----默认开启usb 2-----默认开启usb安全设置,使其开机就可以投屏操控 3------默认开启关机充电自动重启 4-----对于客户特定的app,使其不能联网操作 5-----对…

【Java入门合集】第四章继承(一)

【Java入门合集】第四章继承(一) 博主:命运之光专栏:JAVA入门 学习目标 1.掌握继承性的主要作用、实现、使用限制; 2.掌握this和super的含义及其用法; 3.掌握方法覆写的操作; 4.掌握final关键字…

Linux——进程信号

进程信号 信号的基础生活中技术上 信号的产生信号捕捉接口信号发送接口向任意进程发送信号向自己发送信号 进程退出时——核心转储 信号的保存信号其它相关概念信号如何实现捕捉的 信号的处理sigset_t信号集操作函数sigprocmasksigpending对于信号保存更深入的理解sigaction 可…

JavaWeb ( 八 ) 过滤器与监听器

2.6.过滤器 Filter Filter过滤器能够对匹配的请求到达目标之前或返回响应之后增加一些处理代码 常用来做 全局转码 ,session有效性判断 2.6.1.过滤器声明 在 web.xml 中声明Filter的匹配过滤特征及对应的类路径 , 3.0版本后可以在类上使用 WebFilter 注解来声明 filter-cla…

JVM 类加载子系统

内存结构概述 粗略图: 详细图: 类加载器与类的加载过程 类加载子系统负责从文件系统或者网络中加载 Class 文件, class 文件在文件开头有特定的文件标识ClassLoader 只负责 class 文件的加载,至于它是否可以运行, 则由 Execution Engine 决定加载的类信…

AI读心重磅突破登Nature!大脑信号1秒被看穿,还能预测未来画面

夕小瑶科技说 分享 来源 | 新智元 最近,来自洛桑联邦理工学院的研究团队提出了一种全新的方法,可以用AI从大脑信号中提取视频画面。论文已登Nature,却遭网友疯狂「打假」。 现在,AI不仅会读脑,还会预测下一个画面了&a…

实验十九、利用运算电路解方程

一、题目 研究利用运算电路解方程。已知一元二次方程为 2 X 2 X − 6 0 2X^2X-60 2X2X−60,试求其解。 二、仿真电路 按方程式搭建电路,如图1所示。该电路为加减运算电路,由于同相和反相端电阻参数对称,故省略掉了同相输入端…

2.docker—数据卷操作

文章目录 1、配置数据卷2、数据卷容器3、小结 1、配置数据卷 挂载 # 创建启动容器时,使用 –v 参数 设置数据卷 sudo docker run ... –v 宿主机目录(文件):容器内目录(文件) ...sudo docker run -it --namec1 -v /home/sjj/data:/root/data_container centos:7 /…

【C++进阶之路】类和对象(中)

文章目录 前言六大默认成员函数 一.构造函数性质默认构造函数构造函数(需要传参) 二.析构函数性质默认析构函数练习 三.拷贝构造函数基本性质:形参必须是引用默认拷贝构造浅拷贝深拷贝自定义类型 四.赋值运算符重载函数基本特征全局的运算符重载函数局部的运算符重载…

深入学习 Kotlin 枚举的进阶用法:简洁又高效~

翻译自:https://towardsdev.com/mastering-enums-in-kotlin-a-guide-to-simplify-your-code-130b5934cb16 Kotlin 作为现代的、强大的编程语言,可以给开发者提供诸多特性和工具,得以帮助我们编写更加高效、更具可读性的代码。 其中一个重要的…

开源工具系列7:Kube-bench

导语 Kube-Bench 是一个基于Go开发的应用程序,属于 Kubernete 的安全检测的工具。它可以帮助研究人员对部署的 Kubernete 进行安全检测。 Kube-Bench 是什么 从本质上来说,Kube-Bench 是一个基于Go开发的应用程序,属于 Kubernete 的安全检…

免费版的mp3格式转换器有哪些?这三款软件帮你实现!

在娱乐文化越来越丰富的今天,人们越来越追求音乐、视频等娱乐方式,其中音乐作为一种能够治愈心灵的艺术形式备受欢迎。但要欣赏一首美妙的音乐,就需要我们自己去制作、编辑并转换其格式,以适应各种软件如MP3、MP4等格式。 方法一…

在 Python 中将 Tqdm 与 Asyncio 结合使用

动动发财的小手,点个赞吧! 简介 困扰 在 Python 中使用并发编程来提高效率对于数据科学家来说并不罕见。在后台观察各种子进程或并发线程以保持我的计算或 IO 绑定任务的顺序总是令人满意的。 但是还有一点困扰我的是,当我在后台并发处理成百…

数据结构篇五:队列

文章目录 前言1.队列1.1 队列的概念及结构1.2 队列的实现 2. 各功能的解析及实现2.1 队列的创建2.2 初始化队列2.3 队尾入队列2.4 队头出队列2.5 获取队头元素2.6 获取队尾元素2.7 队列中有效元素个数2.8 检查队列是否为空2.9 销毁队列 3.代码实现3.1 Queue.h3.2 Queue.c3.3 te…

JavaWeb ( 七 ) JSTL Tag标签

2.5.JSTL标签与EL表达式 2.5.1.EL表达式 EL表达式 : Expression Language 目的:为了使JSP写起来更加简单 格式:${expression} EL 提供“.“和“[ ]“两种运算符来存取数据。${user.name}, ${user[“name”] }支持算术操作符, 关系操作符, 逻辑操作符…

Python:Python进阶:内存管理机制

Python内存管理机制 1. 堆2. 栈3. 引用4. Python中可变对象和不可变对象有个问题:你可以好好思考下总结 Python内存管理程序是用 C/C写的,这里我们以 CPython解释器为例说明。 在Python 中 所有数据类型 包括:int dict str都是一个对象&#…