0

0

mysql日志有哪些_mysql日志类型与作用

P粉602998670

P粉602998670

发布时间:2026-01-19 02:13:15

|

321人浏览过

|

来源于php中文网

原创

MySQL日志分为Server层(binlog、error log)和InnoDB引擎层(redo log、undo log),各司其职、互不互通;binlog记录逻辑操作用于复制与PITR,redo log记录物理页修改用于崩溃恢复,undo log保存旧值用于回滚与MVCC。

mysql日志有哪些_mysql日志类型与作用

MySQL 日志不是“一种东西”,而是多个独立日志文件,各司其职、分属不同层级——Server 层(如 binlogerror log)和 InnoDB 引擎层(如 redo logundo log)的日志完全不互通,配置方式、刷盘逻辑、甚至生命周期都不同。搞混它们,轻则查错绕路,重则主从数据不一致或崩溃后无法恢复。

怎么一眼区分 binlog、redo log 和 undo log?

这是开发和 DBA 最常混淆的三类日志,关键区别不在“有没有”,而在“谁写、写什么、什么时候用”:

  • binlog 是 Server 层日志,所有引擎通用;记录的是逻辑操作(比如 UPDATE t SET x=1 WHERE id=5),用于主从复制和基于时间点的恢复(PITR);它不参与崩溃恢复,事务提交后才写入(可配置为每事务刷盘)
  • redo log 是 InnoDB 独有,物理日志,记录的是“某个数据页的第 N 个字节改成了什么值”;它在事务执行过程中就持续写入内存缓冲区(innodb_log_buffer),再由后台线程或事务提交时刷到磁盘(ib_logfile0ib_logfile1);数据库 crash 后靠它重放未刷盘的脏页
  • undo log 也是 InnoDB 引擎层日志,存储在共享表空间或独立 undo 表空间(innodb_undo_directory);它保存的是“旧值”,用于事务回滚和 MVCC 多版本读;不落磁盘文件,而是以段(segment)形式存在页中,由 purge 线程异步清理

一个 UPDATE 执行时,三者协同但互不替代:先写 undo log(留退路),再改内存页并记 redo log(保持久),最后提交时记 binlog(供复制)——这就是两阶段提交(2PC)要协调的点。

哪些日志必须开?哪些建议关?

生产环境不是日志越多越好,而是按需启用,否则 I/O 压力陡增、磁盘爆满、甚至拖慢 QPS:

  • 必须开binlog(主从/备份依赖)、error log(故障第一现场)、slow_query_log(性能问题逃不开它)
  • 建议开general_log(仅调试期临时开启,记录所有语句,性能损耗大)
  • 默认关闭、慎开audit_log(需插件支持,审计合规场景才启用)、relay_log(只在从库生效,主库无意义)

特别注意:general_log 开启后每条连接、每条查询都会落盘,QPS 上千时可能直接打满磁盘 IO;slow_query_log 的阈值别设成 0(等于全量记录),合理值是 long_query_time = 1.0(秒)起步,配合 log_queries_not_using_indexes = ON 更实用。

XYCMS企业建站系统1.2
XYCMS企业建站系统1.2

XYCMS(PHP版)企业建站系统是XYCMS工作室推出的一套通用的企业建站软件系统。XYCMS企业建站系统是专业从事企业网站制作与设计服务,已有四年工作经验,网站系统方便、简洁、容易上手。所设计的版本分为动态版和静态版,比起市场上同类系统,性价比还是很高的,在企业网站建设行业里拥有丰富的经验,并在业界取得好评。 更新日志:1.后台简单特殊字符替换XYCMS(PHP版) 软件的安装:1. 上传 u

下载

怎么快速定位日志路径和当前状态?

别翻配置文件猜,用 SQL 和系统命令直接查:

SHOW VARIABLES LIKE 'log_error'; -- 错误日志路径
SHOW VARIABLES LIKE 'general_log%'; -- 查询日志开关和文件名
SHOW VARIABLES LIKE 'slow_query_log%'; -- 慢日志开关与路径
SHOW VARIABLES LIKE 'log_bin'; -- binlog 是否开启
SHOW VARIABLES LIKE 'innodb_log%'; -- redo log 文件数、大小、路径(如 innodb_log_group_home_dir)
SELECT * FROM performance_schema.log_status; -- MySQL 8.0.30+ 可查所有日志刷盘位点

常见坑:

  • log_bin 开启后,server_id 必须非零且唯一,否则启动报错 ERROR 2002 (HY000): Can't connect to local MySQL server(其实是初始化失败)
  • innodb_log_file_size 修改前必须停库、删旧文件(ib_logfile*),否则重启失败;且总大小(innodb_log_files_in_group × innodb_log_file_size)建议为 2GB–4GB,太小导致频繁 checkpoint,太大延长 recovery 时间
  • binlog_format 设为 STATEMENT 时,NOW()UUID()、自增主键等函数在主从上可能产生不同结果,强烈建议用 ROW

真正难的不是记住日志名字,而是在出问题时能立刻判断该看哪个日志:主从延迟?查 relay_logSHOW SLAVE STATUS;服务起不来?第一眼扫 log_error;update 提交了但查不到?得顺着 undo log 版本链和 redo log 刷盘状态去推——这些日志从来不是孤立存在的,它们的边界和协作关系,才是线上排障的底层地图。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

682

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

347

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1095

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

357

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

676

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

575

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

416

2024.04.29

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

72

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 801人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号