zoukankan      html  css  js  c++  java
  • MySQL Event计划任务刷慢日志

    前言

    最近在尝试一个日志系统graylog来收集mysql的慢查询日志提,供后续的分析、监控和报警等。测试步骤已经到日志已成功收集到graylog,测试时需要刷一些慢查询日志出来。为了刷比较多的日志和不对测试环境造成较大的影响,想到了使用mysql的sleep函数结合event来做刷慢日志。

    MySQL的计划任务是通过event来完成的。相当于SQL Server 的Job。下面是实现过程:

     

    打开mysql的慢日志

    set global slow_query_log = 1;
    set global long_query_time = 1;
    

     

    也可以在配置文件议开启慢日志(建议开启)

     

     

    创建event

    1. 启用event事件功能。

    set global event_scheduler = 1;
    
    1. 创建event,每1秒执行一次。

    delimiter $$
    create or replace EVENT event_flush_slow_log
    ON SCHEDULE
    EVERY 1 SECOND
    on completion preserve ENABLE
    do
    begin
      SELECT SLEEP(1);
    end; $$
    delimiter ;
    

    查询event

    show events where Name like '%event_flush_slow_log%'G;
    或
    select * from information_schema.events where event_name='event_flush_slow_log'G;
    
    1. 开启这个event

    ALTER EVENT event_flush_slow_log ENABLE;
    

    可以看到慢日志一直在写入了。

    # Time: 180126 12:19:57
    # User@Host: root[root] @ localhost [localhost]
    # Thread_id: 1640  Schema: db1  QC_hit: No
    # Query_time: 1.000645  Lock_time: 0.000269  Rows_sent: 1  Rows_examined: 0
    # Rows_affected: 0
    SET timestamp=1516940397;
    SELECT SLEEP(1);
    # Time: 180126 12:19:58
    # User@Host: root[root] @ localhost [localhost]
    # Thread_id: 1641  Schema: db1  QC_hit: No
    # Query_time: 1.000575  Lock_time: 0.000203  Rows_sent: 1  Rows_examined: 0
    # Rows_affected: 0
    SET timestamp=1516940398;
    SELECT SLEEP(1);
    # Time: 180126 12:19:59
    # User@Host: root[root] @ localhost [localhost]
    # Thread_id: 1642  Schema: db1  QC_hit: No
    # Query_time: 1.000856  Lock_time: 0.000180  Rows_sent: 1  Rows_examined: 0
    # Rows_affected: 0
    SET timestamp=1516940399;
    SELECT SLEEP(1);
    
    1. 完成后,关闭event

    ALTER EVENT event_flush_slow_log DISABLE;
    
    1. 假如不需要这个event,可以删除

    DROP EVENT IF EXISTS event_flush_slow_log;
    

    关于sleep函数和event的详细用法,请参考相关文档,这里不再展开。

    定时刷慢日志也可以使用Linux crontab调用脚本来做,但每1秒都要登录一次MySQL来执行一次慢查询,消耗资源较大,不建议这样做吧。

     

     

  • 相关阅读:
    小艾电台-小众音乐科普讲座
    永乐计分器
    顺金斗花牌-比大小
    Bigger_0305
    iTunes Connect后台无法创建App的解决方案
    iOS navigationBar导航栏底部与self.view的分界线的隐藏
    iOS 十六进制的相加取反
    UITabBar-UITabBarItem图片的背景颜色属性和文字的颜色大小设置
    iOS GCD多线程介绍
    [POJ3461] Oulipo
  • 原文地址:https://www.cnblogs.com/fishparadise/p/8359176.html
Copyright © 2011-2022 走看看