最近在嘗試乙個日誌系統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列出所有已經完成單尚未刪除...