MySQL高级第十六篇:数据库日志有哪些(慢查询日志、通用查询日志、错误日志和二进制日志)

news/2024/11/25 16:51:52/

MySQL高级第十六篇:数据库日志有哪些(慢查询日志、通用查询日志、错误日志和二进制日志)

  • 一、MySQL支持的日志有哪些?
    • 1. 日志类型总结
    • 2. 日志有什么缺点吗?
  • 二、通用查询日志(slow query log)
  • 三、错误日志(error log)
  • 四、二进制日志(bin log)
    • 1. 概述
    • 2.binlog写入机制
    • 3. binlog和redolog有什么区别?
    • 4. 怎么保证binlog 和 redolog 一致性(两阶段提交)
  • 五、中继日志(relay log)

一、MySQL支持的日志有哪些?

MySQL有不同类型的日志文件,用来存储不同类型的日志,分为二进制日志、错误日志、通用查询日志和慢查询日志,这也是常用的4种。MySQL 8又新增两种支持的日志:中继日志和数据定义语句日志。使用这些日志文件,可以查看MySQL内部发生的事情。

1. 日志类型总结

  • 慢查询日志:记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
  • 通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对我们复
    原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
  • 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的状态,从而对服务器进行维护。
  • 二进制日志:记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故障时数据
    的无损失恢复。
  • 中继日志:用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器
    通过读取中继日志的内容,来同步主服务器上的操作。
  • 数据定义语句日志:记录数据定义语句执行的元数据操作。
    除二进制日志外,其他日志都是文本文件。默认情况下,所有日志创建于MySQL数据目录中。

2. 日志有什么缺点吗?

  • 降低MySQL数据库的性能
  • 日志会占用大量的磁盘空间

二、通用查询日志(slow query log)

通用查询日志用来记录用户的所有操作,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发
给MySQL数据库服务器的所有SQL指令等。

当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题。

# 查看当前状态
SHOW VARIABLES LIKE '%general%';# 临时开启日志
SET GLOBAL general_log=on;# 关闭日志
SET GLOBAL general_log=off;

三、错误日志(error log)

错误日志记录了MySQL服务器启动、停止运行的时间,以及系统启动、运行和停止过程中的诊断信息,包括错误、警告和提示等。

通过错误日志可以查看系统的运行状态,便于即时发现故障、修复故障。如果MySQL服务出现异常,错误日志是发现问题、解决故障的首选。

错误日志默认是开启的,且无法被禁止

四、二进制日志(bin log)

1. 概述

  • bin log即binary log,二进制日志文件,也叫作变更日志(update log)。它记录了数据库所有执行的DDL和DML等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、show等)。
  • 它以事件形式记录并保存在二进制文件中。
  • 通过这些信息,我们可以再现数据更新操作的全过程。

bin log主要应用场景:

  • 一是用于数据恢复,如果MySQL数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对
    数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。
  • 二是用于数据复制,由于日志的延续性和时效性,master把它的二进制日志传递给slaves来达到master_slave数据一致的目的。
    可以说MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性。
    在这里插入图片描述

2.binlog写入机制

  • binlog的写入时机非常简单,在事务执行过程中,先把日志写到binlog cache,事务提交的时候,再把binlog cache写到binlog文件中。因为一个事务的binlog不能被拆开,无论这个事务多大,也要确保一次性写入,所以系统会给每个线程分配一个块内存作为binlog cache。
    在这里插入图片描述
  • write 和 fsync 的时机,可以由参数sync_binlog控制,默认是0。
  • 为0的时候,表示每次提交事务都只write,由系统自行判断什么时候执行fsync。虽然性能得到提升,但是这种情况会有一定的风险。
  • 如果机器宕机,page cache里面的binglog会丢失。
  • 为了安全起见,我们还可以修改 sync_binlog 参数为 1,表示每次提交事物时都会执行 fsync 刷盘
  • 还有一种折中的方式,设置 sync_binlog 参数为一个大于1的数N,表示每次提交事物都 write ,每N个事物进行一次 fsync 刷盘

3. binlog和redolog有什么区别?

  • redolog 是物理日志,记录内容是“在某个数据页上做了什么修改”,属于InnoDB存储引擎层产生的。

  • redo log让InnoDB存储引擎拥有了崩溃恢复能力。

  • binlog 是逻辑日志,记录内容是语句的原始逻辑,类似于“给ID=2这一行的c字段加1”,属于MySQLServer层。

  • bin log保证了MySQL集群架构的数据一致性。

4. 怎么保证binlog 和 redolog 一致性(两阶段提交)

  • 原理很简单,如下图,将 redolog 的写入拆成 预备 和 提交 两个阶段,我们称之为 两阶段提交
    在这里插入图片描述
  • 使用两阶段提交后,写入binlog时发生异常也不会有影响,因为MySQL根据redo log日志恢复数据时,发现redo log还处于prepare阶段,并且没有对应binlog日志,就会回滚该事务。

五、中继日志(relay log)

  • 中继日志只在主从服务器架构的从服务器上存在
  • 从服务器为了与主服务器保持一致,要从主服务器读取二进制日志的内容,并且把读取到的信息写入本地的日志文件中,这个从服务器本地的日志文件就叫中继日志。
  • 然后,从服务器读取中继日志,并根据中继日志的内容对从服务器的数据进行更新,完成主从服务器的数据同步。

由于篇幅这章就只介绍各种日志,关于主从复制的相关内容,放在下一篇详细讲解…


http://www.ppmy.cn/news/49131.html

相关文章

SpringBoot中使用redis事务

本文基于SpringBoot 2.X 事务在关系型数据库的开发中经常用到,其实非关系型数据库,比如redis也有对事务的支持,本文主要探讨在SpringBoot中如何使用redis事务。 事务的相关介绍可以参考: 0、起因 在一次线上事故中,我们…

6.2 龙格—库塔法

学习目标: 学习龙格-库塔法的具体明确的学习目标可以有以下几点: 理解龙格-库塔法的基本思想和原理:我们应该了解龙格-库塔法的数值求解思想和数值误差的概念,包括截断误差和稳定性等基本概念,并且要熟悉龙格-库塔法的…

根据cadence设计图学习硬件知识 day03 了解 一些芯片 和 数据手册下载的地方

1. MT53D512M32D2DS 芯片(动态随机存取存储器)的技术指标 1.1 16n Prefetch (预加载) (n --芯片位宽) DDR 体系 链接:DDR扫盲—-关于Prefetch(预取)与Burst(突发)的深入讨论_ddr prefetch_qq_25814297-npl的博客-CSDN博客 1.2 每个通…

4.2和4.3、MAC地址、IP地址、端口

计算机网络等相关知识可以去小林coding进行巩固(点击前往) 4.2和4.3、MAC地址、IP地址、端口 1.MAC地址的简介2.IP地址①IP地址简介②IP地址编址方式③A类IP地址④B类IP地址⑤C类IP地址⑥D类IP地址⑧子网掩码 3.端口①简介②端口类型 1.MAC地址的简介 …

Python+Qt人脸识别职工录入管理系统

程序示例精选 PythonQt人脸识别职工录入管理系统 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonQt人脸识别职工录入管理系统>>编写代码&#xff0c;代码整洁&#xff0c…

“行泊舱”+出海全面发力,这家ADAS厂商跑出规模化“新速度”

进入2023年&#xff0c;智能汽车市场已经由纯技术驱动迈入了市场驱动的新周期&#xff0c;接下来的市场竞争比拼的重点将是真正的规模化普及。 《高工智能汽车研究院》认为&#xff0c;中国乘用车市场已经来到了L2普及、L2冲刺发力以及L3/L4小规模落地的并行发展周期。对于智能…

grep -nr 命令查询字符串方式

grep -nr “搜索内容” 文件路径 其中&#xff1a; -n&#xff1a;显示行号-r&#xff1a;递归查找子目录中的文件“搜索内容”&#xff1a;要搜索的内容文件路径&#xff1a;要搜索的文件路径&#xff0c;可以是单个文件或目录路径&#xff08;将会递归搜索该目录下的所有文…

c++ 静态绑定和动态绑定

C 中有两种不同的函数调用方式&#xff1a;静态绑定和动态绑定。 静态绑定 静态绑定是指在编译时确定调用哪个函数。也就是说&#xff0c;编译器会根据函数调用的名称和参数类型来确定要调用的函数。这种方式也被称为静态多态或编译时多态。 静态绑定适用于以下情况&#xff…