MySQL 有哪些日志

MySQL

MySQL 有哪些日志?

  • 慢查询日志:记录执行时间超过阈值的SQL查询语句。用于优化查询性能,找出慢查询并进行优化。
  • redo log:用于InnoDB存储引擎的崩溃恢复。
  • binlog:记录所有对数据的更改操作的日志。它包含了对数据库进行插入、更新和删除操作的详细信息,以二进制形式记录,可以用于数据的备份和恢复、主从复制等场景
  • Undo Log:实现事务的原子性,记录事务对数据的修改操作,方便在事务失败或回滚时恢复数据到事务前的状态,确保数据的一致性。支持事务的回滚和MVCC(多版本并发控制)机制。

重启恢复读取的是哪个文件?

崩溃恢复是读 redo log文件。

redo log 是物理日志,记录了某个数据页做了什么修改,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新,每当执行一个事务就会产生这样的一条或者多条物理日志。

在事务提交时,通过WAL机制,先将 redo log 持久化到磁盘即可,可以不需要等到将缓存在 Buffer Pool 里的脏页数据持久化到磁盘。

当系统崩溃时,虽然脏页数据没有持久化,但是 redo log 已经持久化,接着 MySQL 重启后,可以根据 redo log 的内容,将所有数据恢复到最新的状态。

redo log 的作用是:

  • 实现事务的持久性,让 MySQL 有 crash-safe 的能力,能够保证 MySQL 在任何时间段突然崩溃,重启后之前已提交的记录都不会丢失;
  • 将写操作从「随机写」变成了「顺序写」,提升 MySQL 写入磁盘的性能。

如果redolog日志文件太大怎么办?

默认情况下, InnoDB 存储引擎有 1 个重做日志文件组( redo log Group),「重做日志文件组」由有 2 个 redo log 文件组成,这两个 redo 日志的文件名叫 :ib_logfile0ib_logfile1

img重做日志文件组

在重做日志组中,每个 redo log File 的大小是固定且一致的,假设每个 redo log File 设置的上限是 1 GB,那么总共就可以记录 2GB 的操作。

重做日志文件组是以循环写的方式工作的,从头开始写,写到末尾就又回到开头,相当于一个环形。

所以 InnoDB 存储引擎会先写 ib_logfile0 文件,当 ib_logfile0 文件被写满的时候,会切换至 ib_logfile1 文件,当 ib_logfile1 文件也被写满时,会切换回 ib_logfile0 文件。

img重做日志文件组写入过程

我们知道 redo log 是为了防止 Buffer Pool 中的脏页丢失而设计的,那么如果随着系统运行,Buffer Pool 的脏页刷新到了磁盘中,那么 redo log 对应的记录也就没用了,这时候我们擦除这些旧记录,以腾出空间记录新的更新操作。

redo log 是循环写的方式,相当于一个环形,InnoDB 用 write pos 表示 redo log 当前记录写到的位置,用 checkpoint 表示当前要擦除的位置,如下图:

img

图中的:

  • write pos 和 checkpoint 的移动都是顺时针方向;
  • write pos ~ checkpoint 之间的部分(图中的红色部分),用来记录新的更新操作;
  • check point ~ write pos 之间的部分(图中蓝色部分):待落盘的脏数据页记录;

如果 write pos 追上了 checkpoint,就意味着 redo log 文件满了,这时 MySQL 不能再执行新的更新操作,也就是说 MySQL 会被阻塞因此所以针对并发量大的系统,适当设置 redo log 的文件大小非常重要),此时会停下来将 Buffer Pool 中的脏页刷新到磁盘中,然后标记 redo log 哪些记录可以被擦除,接着对旧的 redo log 记录进行擦除,等擦除完旧记录腾出了空间,checkpoint 就会往后移动(图中顺时针),然后 MySQL 恢复正常运行,继续执行新的更新操作。

所以,一次 checkpoint 的过程就是脏页刷新到磁盘中变成干净页,然后标记 redo log 哪些记录可以被覆盖的过程。

char和varchar的区别?

Char和Varchar是两种用于存储文本数据的数据类型,它们的主要区别在于存储方式和使用场景:

  • Char是一种固定长度的数据类型,它始终占用指定长度的存储空间,不论实际存储的数据长度是多少。如果存储的文本长度固定不变,可以使用Char。
  • Varchar是一种可变长度的数据类型,它只占用实际存储数据长度所需的存储空间,可以节省存储空间。如果存储的文本长度变化较大,可以使用Varchar。

MySQL有哪些优化方式?

  • 针对慢SQL可以进SQL优化,优化的方式可以建立联合索引进行索引覆盖优化,减少回表;对排序字段增加索引避免 file sort的问题;使用小表驱动大;or改成union;大偏移量的limit,先通过>id找到第一页的 id,再limit。
  • 针对热点数据可以构建缓存,查询的时候先查缓存,减少对 mysql 的访问提高查询效率。
  • 读请求过大的时候,可以构建 mysql 主从架构,进行读写分离,由多个从机来承接读请求的流量。
  • 写请求过大的时候,可以进行分库,由多个 mysql 机器来承接写请求的流量。
  • 客户端可以增加客户端连接池,减少客户端与 mysql 连接的建立和释放的开销,复用连接。
  • 13
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

飞行模式、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值