MySQL日志基础知识

MySQL中的常见日志:

MySQL日志主要包括:错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。其中,比较重要的是二进制日志 binlog(归档日志)和事务日志redo log(重做日志)和undo log(回滚日志)。

慢查询日志的作用:

慢查询日志可以记录所有执行的SQL语句,包括执行时间、扫描的行数等信息,我们可以通过分析这些信息来了解数据库的使用情况,检测数据库是否正常运行,避免出现数据库宕机等问题,总之慢查询日志是一个非常重要的工具,它可以帮助我们发现问题、优化性能、监控健康状态等,保障数据库的稳定和高效运行。

binlog的作用:

binlog文件是记录了所有数据库表结构变更和表数据修改的日志,不会记录查询类的操作,比如select和show操作

redo log保证事务持久性的方式:

使用redo log,当数据发生修改时,先在redo log里面记录本次操作,然后再修改缓冲区中的数据。在事务提交时或提交前,调用fsync接口对redo log进行刷盘。

如果MySQL数据库宕机了,重启的时候,只需要读取redo log里面的数据,就可以对数据库进行恢复。由于redo log是WAL(Write Ahead Log)日志,也就是预写日志,在修改前,先写到日志里,所以保证了数据不会因为MySQL宕机而丢失数据,从而满足了持久性的要求。

redo log刷盘时机:

InnoDB存储引擎为redo log的刷盘策略提供了innodb_flush_log_at_trx_commit参数,它支持三种策略:

  • 0:设置为0的时候,表示每次事务提交时不进行刷盘操作
  • 1:设置为1的时候,表示每次事务提交时都将进行刷盘操作(默认值)
  • 2:设置为2的时候,表示每次事务提交时都只把redo log buffer内容写入page cache

innodb_flush_log_at_trx_commit参数默认为1,也就是说当事务提交时会调用fsync对redo log进行刷盘。另外,InnoDB存储引擎有一个后台线程,每隔一秒,就会把redo log buffer中的内容写到文件系统缓存(page cache),然后调用fsync刷盘。

页修改后不直接刷盘的原因:

  • 数据页大小是16KB,刷盘比较耗时,可能就修改了数据页里的几Byte数据,没必要把完整的数据页刷盘。而且数据页是随机写,因为一个数据页对应的位置可能在硬盘文件的随机位置,所以性能很差
  • 如果是写redo log,一行记录可能就占几十Byte,只包含表空间号、数据页号、磁盘文件偏移量、更新值,再加上是顺序写,所以刷盘速度很快

redo log和binlog的区别:

  • redo log是在InnoDB存储引擎层产生,而binlog是MySQL数据库的上层产生的,并且二进制日志不仅仅针对InnoDB存储引擎,MySQL数据库中的任何存储引擎对于数据库的修改都会产生二进制日志
  • 两种日志记录的内容形式不同。MySQL的binlog是逻辑日志,其记录是对应的SQL语句。而binlog存储引擎的重做日志是物理日志
  • 两种日志记录写入磁盘的时间点不同,二进制日志只在事务提交完成后进行一次写入。而binlog存储引擎的重做日志在事务进行中不断地被写入,并且日志不是随事务提交的顺序写入的
  • binlog不是循环使用,在写满或者重启之后,会生成新的binlog文件,redo log是循环使用
  • binlog可以作为恢复数据使用,主从复制搭建,redo log作为异常宕机或者介质故障后的数据恢复使用

undo log保证事务的原子性:

对事务进行一些列的修改之前,都会把其历史数据保存到undo log,然后把更新的数据记录到redo log日志里。当我们的事务进行commit后可以通过redo log日志来保证只要commit后的事务数据都会全部同步修改到数据库。当事务进行rollback时,我们可以通过undo log记录的历史版本来对整个事务关联的修改的数据进行回滚。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

链表OJ题(一)

(一)轮转数组 . - 力扣(LeetCode) 题目描述:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例一: 方法一:暴力求解 先用一个变量存储数组中的最后…

Python如何精准定位并修改MP4文件的mvhd原子

深入了解MP4文件的结构对于安全地修改元数据非常重要。MP4文件采用基于原子(atom)的结构组织数据,每个原子代表一种特定的信息或数据块。例如,moov原子包含了视频的元数据信息,mvhd原子包含了视频的头信息,…

[SMARTFORMS] 系统变量的使用

在PAGE1页面节点下创建WINDOW5窗口 填写WINDOW5窗口描述以及位置,大小等相关信息 在WINDOW5窗口节点下新建TEMPLATE模板 为TEMPLATE模板设置行列相关信息 在TEMPLATE模板节点下面新增3个TEXT文本 每个TEXT文本的内容如下所示: %TEXT25 打印日期文本内容 …

C盘清理方法大全

目录 方法1:系统磁盘清理 方法2:找到存储删除 方法3:使用第三方软件Dism 方法4:关闭虚拟内存功能 方法5:磁盘分区扩展 方法1:系统磁盘清理 第一步:「此电脑 」- 「本地磁盘C」&#xff0c…

计算机的错误计算(二百零三)

摘要 利用两个大模型化简计算 其中一个大模型是数学解题器,它通过化简得出了正确结果;另外一个大模型给出了 Python代码。 例1. 化简计算摘要中算式。 下面是一个数学解题器大模型给的回答。 以上是数学解题器大模型给的回答。 下面是与另外一个大模型…

【JVM】总结篇之GC日志分析 和 案例

文章目录 GC日志参数GC日志格式GC日志分类MinorGCFullGC 文件概念 OOMOOM案例1:堆溢出OOM案例2:元空间溢出OOM案例3:GC overhead limit exceededOOM案例4:线程溢出 GC日志参数 GC日志格式 GC日志分类 MinorGC MinorGC(或young …

ASP.NET Core 中服务生命周期详解:Scoped、Transient 和 Singleton 的业务场景分析

前言 在 ASP.NET Core 中,服务的生命周期直接影响应用的性能和行为。通过依赖注入容器 (Dependency Injection, DI),我们可以为服务定义其生命周期:Scoped、Transient 和 Singleton。本文将详细阐述这些生命周期的区别及其在实际业务中的应用…

Redis中字符串和列表的区别

在 Redis 中,字符串(String)和列表(List)是两种截然不同的数据类型,它们各自有着独特的特点和适用场景。 数据结构 • 字符串(String): • 在 Redis 中,字符串…

正则表达式{}和(),pyhton里的正则表达式,函数findall解析

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 正则…

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域,首要要了解源 什么是源,源等于协议加域名加端口号 只有这三个都相同,才是同源,反之则是非同源。 比如下面这四个里,只有第4个是同源 而浏览器给服务器发送请求时,他们的源一样&#xff0…

x86霸权难动摇!

快科技1月6日消息,根据市场研究机构ABI Research的最新报告,尽管2025年被视为Arm PC市场扩张的关键一年,但搭载Arm架构处理器的PC预计仅占PC总出货量的13%。 ABI Research的分析师指出,尽管高通最新的PC处理器在性能和AI功能上有…

STM32的LED点亮教程:使用HAL库与Proteus仿真

学习目标:掌握使用STM32 HAL库点亮LED灯,并通过Proteus进行仿真验证! 建立HAL库标准工程 1.新建工程文件夹 新建工程文件夹建议路径尽量为中文。建立文件夹的目的为了更好分类去管理项目工程中需要的各类工程文件。 首先需要在某个位置建立工…

mongodb==安装prisma连接

官网下载mongodb,解压安装 Download MongoDB Community Server | MongoDB 修改bin/mongod.cfg # mongod.conf# for documentation of all options, see: # http://docs.mongodb.org/manual/reference/configuration-options/# Where and how to store data. storage:dbPat…

前端工程化之手搓webpack5 --【elpis全栈项目】

前端工程化之手搓webpack5 --【elpis全栈项目】 导读 基本流程:输入 – 编译 – 输出 #mermaid-svg-V8Gi7RFNikCuEhax {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V8Gi7RFNikCuEhax .error-icon{fil…

云备份项目--服务端编写

文章目录 7. 数据管理模块7.1 如何设计7.2 完整的类 8. 热点管理8.1 如何设计8.2 完整的类 9. 业务处理模块9.1 如何设计9.2 完整的类9.3 测试9.3.1 测试展示功能 完整的代码–gitee链接 7. 数据管理模块 TODO: 读写锁?普通锁? 7.1 如何设计 需要管理…

深入了解 ES6 Map:用法与实践

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

大润发易主,被阿里割肉卖了

文丨白念云 零售行业2025年伊始便迎来一则重磅消息:大润发被卖了。 1月1日晚,阿里巴巴集团发布公告,宣布子公司及NewRetail与德弘资本达成交易,以最高约131.38亿港元出售所持高鑫零售(大润发母公司)全部股…

VulnHub—potato-suncs

使用命令扫描靶机ip arp-scan -l 尝试访问一下ip 发现一个大土豆没什么用 尝试扫描一下子域名 没有发现什么有用的信息 尝试扫描端口 namp -A 192.168.19.137 -p- 尝试访问一下端口,发现都访问不进去 查看源代码发现了网页的标题 potato,就想着爆破一下密码 hydr…

docker学习记录:commit,制作自己的镜像

1.清除所有 ktkt-SYS-4028GR-TR2:~$ sudo docker rm -f $(sudo docker ps -aq)2.再操作一次tomcat,修改好,再打成一外镜像 ktkt-SYS-4028GR-TR2:~$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat 9.0 3…

macos安装java8

下载 dmg方式安装 安装 双击pkg运行 输入java -version验证 配置环境变量 cd ~ ls -a输入 ls -a后查看是否已经存在.bash_profile文件,如果已经存在就不需要创建,如果不存在,继续执行下方命令创建文件 touch .bash_profile /usr/l…