MySQL Event計畫任務刷慢日誌

2022-02-14 16:41:00 字數 2134 閱讀 3531

最近在嘗試乙個日誌系統graylog來收集mysql的慢查詢日誌提,供後續的分析、監控和報警等。測試步驟已經到日誌已成功收集到graylog,測試時需要刷一些慢查詢日誌出來。為了刷比較多的日誌和不對測試環境造成較大的影響,想到了使用mysql的sleep函式結合event來做刷慢日誌。

mysql的計畫任務是通過event來完成的。相當於sql server 的job。下面是實現過程:

set global slow_query_log = 1;

set global long_query_time = 1;

也可以在配置檔案議開啟慢日誌(建議開啟)

啟用event事件功能。

set global event_scheduler = 1;

建立event,每1秒執行一次。

delimiter $$

create or replace event event_flush_slow_log

on schedule

every 1 second

on completion preserve enable

dobegin

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;

開啟這個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);

完成後,關閉event

alter event event_flush_slow_log disable;

假如不需要這個event,可以刪除

drop event if exists event_flush_slow_log;

關於sleep函式和event的詳細用法,請參考相關文件,這裡不再展開。

定時刷慢日誌也可以使用linux crontab呼叫指令碼來做,但每1秒都要登入一次mysql來執行一次慢查詢,消耗資源較大,不建議這樣做吧。

Linux計畫任務

1.at命令 指定乙個時間執行乙個任務。2.cron命令 根據乙個時間表自動執行任務。3.anacron命令 在乙個指定時間間隔錯過後自動執行任務。at命令 安排乙個任務在未來執行,需要乙個系統後台atd程序。4.如果這個程序沒有開啟,那麼執行 etc init.d atd restart chkc...

Oracle計畫任務

oracle計畫任務 每天零晨1 30執行乙個儲存過程 對涉及到 oracle 資料庫,需要定時執行的工作,可以考慮三個方法 1 用 oracle 的job 來完成2 寫個批處理檔案,用 windows 的計畫任務實現3 oracle 中建表,寫過程,外部寫監控程式呼叫 執行緒不斷檢查有沒有要執行的...

Linux 計畫任務

at命令可以在某一指定時間排程一次性作業命令格式 at q x l f file d v time引數含義 q使用指定的佇列來儲存at資料,預設儲存在a佇列,隊列表號為a z,a z總52個 l列出所有的at計畫任務,等同於atq命令 d刪除at計畫任務,等同於atrm v列出所有已經完成單尚未刪除...