0

0

mysql如何优化主从架构下的慢查询记录_mysql从库慢日志开启

P粉602998670

P粉602998670

发布时间:2026-03-13 08:16:02

|

914人浏览过

|

来源于php中文网

原创

MySQL从库慢查询日志未生效是因为该配置不通过binlog同步,需手动启用;常见原因包括配置未加载、权限不足、未关闭log_slow_slave_statements导致误录复制等待。

mysql如何优化主从架构下的慢查询记录_mysql从库慢日志开启

从库开启慢查询日志为什么没生效

MySQL 从库默认关闭 slow_query_log,即使主库开了,也不会自动同步这个配置。它不走 binlog 复制,必须手动在从库上显式启用。

常见错误现象:SHOW VARIABLES LIKE 'slow_query_log' 返回 OFFmysqld 进程启动后查不到 slow.log 文件;用 SELECT SLEEP(10) 测试也不写入日志。

  • 确认从库配置文件(如 /etc/my.cnf/etc/mysql/mysql.conf.d/mysqld.cnf)中已添加:
    slow_query_log = ON<br>slow_query_log_file = /var/log/mysql/mysql-slow.log<br>long_query_time = 2
  • long_query_time 在从库建议设得比主库更小(比如 1 或 0.5),因为从库通常只读、资源更紧张,轻微慢查也值得捕获
  • 重启 mysqld 或执行 SET GLOBAL slow_query_log = ON(但后者在服务重启后失效)
  • 检查 slow_query_log_file 路径权限:MySQL 用户(如 mysql)必须有写权限,否则静默失败

从库慢日志里为什么全是“system lock”或“Waiting for semi-sync ACK”

这是典型误判:这些不是用户 SQL 慢,而是复制线程或半同步等待导致的“假慢”。MySQL 的慢日志会记录所有超过 long_query_time 的语句执行阶段,包括复制线程内部等待。

使用场景:排查真实业务查询延迟时,这类日志反而干扰判断。

  • 加参数 log_slow_slave_statements = OFF(MySQL 5.7.3+)可禁止记录从库 SQL 线程执行的语句(即 relay log 重放内容)
  • 若用的是 MySQL 8.0+,还可配合 log_slow_admin_statements = OFF 屏蔽 ANALYZE TABLE 等管理语句
  • 注意:log_slow_slave_statements 不影响用户连接发起的查询,只过滤 SQL 线程自身行为

主从延迟大时,慢日志时间戳不准怎么办

从库慢日志里的时间戳是语句「执行完成」时间,不是「开始执行」或「主库提交」时间。当主从延迟几十秒甚至几分钟时,日志里显示“10:00:00 执行了慢查询”,实际这条语句在主库可能是 09:59:20 提交的 —— 时间差就是复制延迟。

Glimmer Ai
Glimmer Ai

基于GPT-3和DALL·E2的PPT制作工具

下载

这会导致按时间排查问题时错位,尤其和应用日志对不上。

  • 务必同时采集 Seconds_Behind_Master(用 SHOW SLAVE STATUS 查),在分析慢日志时间段时反向推算主库大致时间点
  • 避免单独依赖慢日志时间戳做根因定位;优先结合 pt-query-digest 分析日志,并用 --since--until 配合延迟值做时间窗口修正
  • 如果启用了 GTID,可用 SELECT MASTER_POS_WAIT('xxx', xxx) 辅助验证某条事务是否已在从库落地

慢日志文件轮转后,从库会不会丢日志

不会自动丢,但容易因配置疏漏导致新日志写不进磁盘,表现为日志停止增长且无报错。

关键点在于:MySQL 自身不管理慢日志轮转,全靠外部工具(如 logrotate)或人工 FLUSH LOGS,而从库常被忽略轮转逻辑。

  • 若用 logrotate,确保配置中包含 create 644 mysql mysqlpostrotate ... mysql -e "FLUSH LOGS" ... endscript
  • 不要只在主库配轮转,从库必须独立配置 —— 因为 slow_query_log_file 是本地路径,且主从可能部署在不同机器
  • 检查 max_slow_log_file_size(MySQL 8.0.25+)是否设限,过小可能导致日志被截断而不报错
事情说清了就结束。最常被跳过的其实是从库日志路径权限和 log_slow_slave_statements 这个开关,一漏就白开。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

1134

2023.10.12

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

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

340

2023.10.27

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

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

381

2024.02.23

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

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

2174

2024.03.06

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

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

380

2024.03.06

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

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

1703

2024.04.07

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

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

586

2024.04.29

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

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

440

2024.04.29

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

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

精品课程

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

共48课时 | 2.5万人学习

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

共3课时 | 0.3万人学习

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

共1课时 | 850人学习

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

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