mysql event 日志_MySQL Event计划任务刷慢日志
前言
最近在嘗試一個日志系統(tǒng)graylog來收集mysql的慢查詢?nèi)罩咎?#xff0c;供后續(xù)的分析、監(jiān)控和報(bào)警等。測試步驟已經(jīng)到日志已成功收集到graylog,測試時(shí)需要刷一些慢查詢?nèi)罩境鰜怼榱怂⒈容^多的日志和不對測試環(huán)境造成較大的影響,想到了使用mysql的sleep函數(shù)結(jié)合event來做刷慢日志。
MySQL的計(jì)劃任務(wù)是通過event來完成的。相當(dāng)于SQL Server 的Job。下面是實(shí)現(xiàn)過程:
打開mysql的慢日志
set global slow_query_log = 1;
set global long_query_time = 1;
也可以在配置文件議開啟慢日志(建議開啟)
創(chuàng)建event
啟用event事件功能。
set global event_scheduler = 1;
創(chuàng)建event,每1秒執(zhí)行一次。
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;
開啟這個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);
完成后,關(guān)閉event
ALTER EVENT event_flush_slow_log DISABLE;
假如不需要這個event,可以刪除
DROP EVENT IF EXISTS event_flush_slow_log;
關(guān)于sleep函數(shù)和event的詳細(xì)用法,請參考相關(guān)文檔,這里不再展開。
定時(shí)刷慢日志也可以使用Linux crontab調(diào)用腳本來做,但每1秒都要登錄一次MySQL來執(zhí)行一次慢查詢,消耗資源較大,不建議這樣做吧。
總結(jié)
以上是生活随笔為你收集整理的mysql event 日志_MySQL Event计划任务刷慢日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓程序退出自动结束进程 设置(安卓程序
- 下一篇: refreshtoken用mysql_微