MySQL 日志机制

日志机制:

错误日志:

当数据库无法正常启动时 第一个定位错误日志
数据库速度慢时 也可以定位错误日志得到建议(如增大缓存池 增大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

posted @ 2023-07-25 17:40  熏晴微穗  阅读(21)  评论(0编辑  收藏  举报