MySQL日志系统:类型、作用与配置详解

MySQL日志系统:类型、作用与配置详解

概述

MySQL 的日志系统是其可靠性和数据一致性的基石。了解各类日志的作用和处理流程,是深入理解 MySQL 运行机制的关键。InnoDB 存储引擎结合 MySQL Server 层,构建了一套完整的日志体系。

日志类型概览

MySQL 的日志分为两大类:

Server 层日志

日志类型 作用 存储位置
二进制日志(Binlog) 记录数据变更,用于复制和恢复 磁盘文件
慢查询日志(Slow Query Log) 记录执行超过阈值的 SQL 磁盘文件
错误日志(Error Log) 记录启动、运行、关闭时的错误信息 磁盘文件
通用查询日志(General Log) 记录所有客户端连接和 SQL(性能差,生产少用) 磁盘文件
中继日志(Relay Log) 从库从主库拉取的 binlog,用于回放 磁盘文件

InnoDB 引擎层日志

日志类型 作用 存储位置
重做日志(Redo Log) 保证事务持久性(Durability),崩溃恢复用 ib_logfile 文件
回滚日志(Undo Log) 保证事务原子性(Atomicity),支持回滚和 MVCC ibdata1(共享表空间)或独立 undo 表空间
Doublewrite Buffer 解决部分页面写入问题,防止数据损坏 共享表空间

日志写入流程

一条 UPDATE 语句执行时,日志的写入顺序如下:

UPDATE users SET name = 'new' WHERE id = 1;
  1. Undo Log:记录旧值,以便回滚
  2. Redo Log(Prepare):写入 redo log,标记为 prepare 状态
  3. Binlog:写入二进制日志
  4. Redo Log(Commit):将 redo log 标记为 commit 状态(两阶段提交)

关键配置速查

# Binlog
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
sync_binlog = 1

# Redo Log
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 1

# 慢查询
slow_query_log = ON
long_query_time = 2
slow_query_log_file = /var/log/mysql/slow.log

# 错误日志
log_error = /var/log/mysql/error.log

日志之间的关系

事务提交
   │
   ├──→ Redo Log(持久化事务变更,崩溃恢复用)
   │
   ├──→ Binlog(记录逻辑 SQL 或行变更,复制和 PITR 用)
   │
   └──→ Undo Log(记录旧版本数据,回滚和 MVCC 用)
                      │
                      └──→ Buffer Pool ← Redo Log 保护已提交的数据

面试要点

  1. Redo Log 是物理日志,记录”做了什么修改”;Binlog 是逻辑日志,记录”怎么修改的”
  2. Redo Log 是 InnoDB 特有的,Binlog 是 Server 层共有的
  3. 两阶段提交 保证 Redo Log 和 Binlog 的一致性
  4. Undo Log 同时服务事务回滚和 MVCC 快照读
  5. Redo Log 是循环写的(固定大小),Binlog 是追加写的(可无限增长)
© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容