互联网服务MySQL

Mysql的慢查询可以放到从库吗?

  近期出现生产慢查询导致机器负载爆掉,因为业务特殊性,需要长期统计慢查询日志。所以无法关闭慢查询功能,有没有什么办法既可以保留慢查询又不影响主库呢?是否可以把慢查询放到从库上收集?如果放到从库上能收集到主库的慢查询信息吗?目前主从同步用的是mysql自带的binlog复...显示全部

  近期出现生产慢查询导致机器负载爆掉,因为业务特殊性,需要长期统计慢查询日志。所以无法关闭慢查询功能,有没有什么办法既可以保留慢查询又不影响主库呢?

是否可以把慢查询放到从库上收集?如果放到从库上能收集到主库的慢查询信息吗?
目前主从同步用的是mysql自带的binlog复制。

慢查询属于底层配置,无法直接修改生效,必须重启生效。
对于生产环境是否有其它方法绕过直接在线生效?

收起
参与10

返回wenwen123的回答

wenwen123wenwen123项目经理MM

在需要长期统计慢查询日志的情况下,可以考虑将慢查询日志收集放在从库上,以减少对主库的影响。以下是一些相关建议:

  1. 配置从库慢查询日志:在从库上启用慢查询日志功能,可以通过修改从库的 MySQL 配置文件(my.cnf 或 my.ini)来实现。在配置文件中设置参数 slow_query_log = 1 和 slow_query_log_file = ,将慢查询日志记录到指定的文件中。
  2. 主从同步慢查询日志:默认情况下,从库不会记录主库的慢查询日志。为了收集主库的慢查询信息,可以通过在从库上配置参数 log-slave-updates = 1,使从库将主库的慢查询语句也写入慢查询日志。
  3. 同步延迟注意事项:当从库的慢查询日志开启后,可能会增加从库的负载。确保从库的性能足够支持慢查询日志的记录和处理,并且主从同步延迟不会影响业务需求。
  4. 在线修改生效:如果您无法直接修改底层配置并要求在线生效,您可以考虑使用动态修改配置的方式。MySQL 提供了 SET GLOBAL 命令,可以在不重启 MySQL 的情况下动态地修改一些全局参数,包括慢查询相关的参数。例如,您可以使用以下命令实时启用或禁用慢查询日志:

SET GLOBAL slow_query_log = 1; -- 启用慢查询日志
SET GLOBAL slow_query_log = 0; -- 禁用慢查询日志

请注意,这种方式可能会对 MySQL 的性能产生一定的影响,因此在生产环境中应慎重使用。

无论您选择将慢查询日志放在主库还是从库上收集,都需要仔细评估和监控系统的性能和同步情况,确保业务不受影响,并及时采取必要的优化措施。另外,建议在生产环境中进行相关操作之前,先在测试环境或备份环境进行充分测试和验证。

互联网服务 · 2023-07-06
  • 感谢大佬,目前整体的负载不高,都是慢查询收集导致负载飙升,因而影响正常业务,放从库上就可以避免影响业务了。
    2023-07-07
  • 大佬你好,这边设置验证了下,从库收集不到主库的慢日志,从库修改my.cnf文件 log-slave-updates = 1 slow_query_log = on long_query_time= 5 slow-query_log_file='/usr/local/mysql/var/mysql-slow.log' 重启 经过两个小时的观察,主库有新增的慢查询,从库这边一直没有新增。
    2023-07-10

回答者

wenwen123
项目经理MM
擅长领域: 人工智能云计算数据库

wenwen123 最近回答过的问题

回答状态

  • 发布时间:2023-07-06
  • 关注会员:2 人
  • 回答浏览:530
  • X社区推广