首页 > 数据库 >MySQL 日志机制

MySQL 日志机制

时间:2023-07-25 18:46:04浏览次数:49  
标签:log 记录 undo MySQL 日志 redo 机制

日志机制:

错误日志:

当数据库无法正常启动时 第一个定位错误日志
数据库速度慢时 也可以定位错误日志得到建议(如增大缓存池 增大redologbuffer等)

查询日志:

没啥用 就是记录查询而已 应该是为了对应binlog记录修改的日志

慢查询日志:

捕获查询慢的情况

配置:
  • 可以设置每分钟最多有几个语句加入慢查询日志

  • 使用mysqldumpslow工具 可以更好的排查慢查询日志

  • 默认输出为File也可以输出成table格式(成为mysql下的slow log表)

MySQL 捕获方式
  • 查询时间大于long_query_time的语句

  • 未走索引的语句

InnoDB 捕获方式
  • 逻辑读取次数 (包含所有的磁盘/缓冲池读取)
  • 物理读取次数 (物理读取次数)

归档日志:bin log

也称为二进制日志 它记录了Mysql中数据的更改

作用:PIT恢复、主从复制、审计防止注入

建议:

  • 为了保证数据库的高可用性 最好在该日志每次写的时候同步到磁盘
    (对性能有影响)
  • 可以使用mysqlbinlog工具查看binlog

binlog 共有3种格式:

statement		  #binlog中记录SQL日志。
rows			#rows格式记录每一个行的每一个字段的具体改动
mixed			#默认记录sql, 由MySQL判断,可能会造成数据不一致的情况便会使用rows格式进行记录。

重做日志:redo log

作用:

保证ACID原则中的持久性原则 在事务提交时 先写入redo log 再写入真正的数据 (也就是WAL机制) 从而保证持久性

区别:

redo log 与 bin log:

  • bin log只在commit的时候写入 而redo log在事务过程中一直再写 (所以redo log可以解决ACID的持久性问题)
  • 另外 bin log 是MySQL支持的 redo log 是InnoDB存储引擎支持的

WAL:

MySQL为了提高数据库的性能 采用了WAL机制(Write-Ahead Logging)
客户端在修改数据的过程后 并不会立马对硬盘中的数据进行更新
WAL机制意义就在于 削峰 这也是我们在处理高并发场景下的一个解决思路

WAL机制 主要的操作是先写日志 先在一个日志中记录了MySQL要对硬盘中的存储MySQL数据的数据页中的数据进行什么样的更改 等到Mysql空闲的时候再进行同步操作到硬盘中
写日志是顺序写 直接改磁盘是随机写 所以写日志要更快

WAL还可以通过cache合并多条写操作为一条数据 减少IO操作

回滚日志: undo log

作用:

事务的回滚 以及MVCC的支持

定义:

undo log是一个逻辑日志 用来回滚使用 MySQL的InnoDB存储引擎就是利用undo log实现MVCC(多版本并发控制)的

事务中 在做任何操作之前 都会先将数据备份到undo log中 再去修改数据 如果过程中发生错误 就会利用undo log进行回滚

可以这样理解undo log的记录内容:

事务中执行了一条delete 对应的在undo log中就记录一条insert

事务中执行了一条insert 对应的在undo log中就记录一条delete

如果记录的是一条update 对应的undo log中记录的就是一条相反的update

标签:log,记录,undo,MySQL,日志,redo,机制
From: https://www.cnblogs.com/AnotherVincent/p/17580627.html

相关文章

  • MySQL 数据库连接
    数据连接:连接:MySQL驱动:mysql-connector-Java-XXX.jar数据库连接的建立及关闭是及耗费系统资源的操作,在多层结构的应用环境中,这种资源的耗费对系统性能影响尤为明显。通过DriverManager获得数据库连接的方式,一个数据库连接对象对应一个物理数据库连接,每次操作都打开一个物......
  • MySQL 容灾备份
    容灾备份:数据备份:直接对数据库进行备份:#数据库备份语句#不指定表名的话默认就是整个数据库备份#备份文件可以指定绝对路径mysqldump-u[用户名]-p[库名][表名]...>[备份文件.sql]#多个数据库备份语句mysqldump-u[用户名]-p--databases[库名][库名]......
  • MySQL 索引
    索引分析:索引概述:定义:MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构。结论:索引是数据结构结构:MySQL支持多种存储引擎而各种存储引擎对索引的支持也各不相同因此MySQL数据库支持多种索引类型如BTree索引、哈希索引、全文索引等等目前大部分数据库......
  • kettle连接数据库报错:Error connecting to database: (using class org.gjt.mm.mysql.
    kettle连接MySQL报错但已经把相应的包放到kettle的lib目录下时,仍然报连接不上的错误,那可能是MySQL时区的问题。解决如下:登入MySQL修改为东八区的命令:方法一:mysql>setglobalmax_allowed_packet=1024*1024;mysql>setglobaltime_zone='+8:00';方法二:修改my.ini文件,在[mysql......
  • Mysql开启慢查询日志
    查看mysql的慢查询日志是否开启showvariableslike'%query%';  可以看到slow_query_log的值是OFF,mysql默认是不启用慢查询日志的。这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引的查......
  • mysql 中 myisam 与 innodb 的区别?
     1.事务支持>MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。>InnoDB:提供事务支持事务,外部键等高级数据库功能。具有事务(commit)、回滚(rollback)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(......
  • sql server 创建复制机制
    SQLServer创建复制机制整体流程下面是创建SQLServer复制机制的整体流程,可以用表格展示步骤:步骤描述1创建发布者2创建订阅者3配置发布者4配置订阅者5启动复制具体步骤和代码示例步骤1:创建发布者首先,我们需要创建一个发布者(即主数据库),用来......
  • springboot mysql 配置 propertis
    SpringBootMySQL配置Properties在SpringBoot应用程序中,我们经常需要使用MySQL数据库来存储和检索数据。为了连接和配置MySQL数据库,我们可以使用application.properties文件。这篇文章将向您展示如何使用SpringBoot的application.properties文件来配置MySQL数据库连接。1.引......
  • .NET项目重构之日志服务(Serilog)
    1.目录1.目录2.前言2.1.日志控件的选择3.日志配置3.1.控制台打印3.2.文件打印4.结语2.前言定时任务中比较重要的一个环节就是日志记录,有了日志可以记录系统的操作过程,也可以在系统异常时方便排查错误原因。比如定时任务经常要做的一个事情,同步其它异构......
  • 允许任意IP访问mysql数据库
    问题描述MYSQL默认只能本地连接,即127.0.0.1和localhost,其他主机IP无法访问数据库,否则会出现如下报错信息:HostisnotallowedtoconnecttothisMySQLserver一、先在本地用localhost用户登录MYSQLmysql>mysql-hlocalhost-uroot-p1二、查询用户表mysql>selecthost,us......