MySQL Event歷史記錄

2021-10-11 08:15:32 字數 3684 閱讀 7792

需求

sql server的作業歷史(job)記錄是儲存在msdb庫中的,很方便就查詢相關的job定義,計畫和歷史記錄,而mysql的event卻沒有歷史記錄。為方便檢視event是否正常執行以及執行結果,通過以下兩個步驟來實現類似的功能。實現

1. 在mysql庫建立event執行的歷史記錄表

create

table

`mysql`.`udf_event_history` (

`id`

int(10) unsigned not

null

auto_increment,

`event_gid`

varchar(36) not

null,`

db_name` varchar(128) not

null

default'',

`event_name`

varchar(128) not

null

default'',

`start_time`

datetime(3) not

null

default

current_timestamp

(),`end_time`

datetime(3) default

null

,`is_success`

tinyint(4) default0,

`duration`

decimal(15,3) default

null

,`error_msg`

varchar(512) default

null

,primary

key(`id`),

unique

key`idx_event_git` (`event_gid`),

key `idx_db_event_name` (`db_name

`,`event_name`),

key`idx_s_e_time` (`start_time`,`end_time`)

) engine

=innodb default charset=utf8mb4;

2.根據以下建模板建立event

請注意根據實際情況修改相關資訊

use

db1;

delimiter $$

create definer=

`root`@`localhost` event `event_test1`

on schedule every 1 minute starts '

2019-01-01 00:00:00'on

completion preserve enable do

begin

declare r_code char(5) default

'00000

';

declare r_msg text

;

declare v_error int

;

declare v_start_time datetime(3) default now(3

);

declare v_event_gid varchar(36) default

upper(replace(uuid(),'

-',''

));

/*修改為實際的event名

*/insert

into mysql.udf_event_history (db_name

, event_name, start_time, event_gid)

values(database(), '

event_test1

', v_start_time, v_event_gid);

begin

declare

continue handler for

sqlexception

begin

set v_error =

1;

get diagnostics condition

1 r_code = returned_sqlstate, r_msg =

message_text;

end;

/*實際要執行語句或儲存過程,等

*/call db1.usp_1();

end;

update

mysql.udf_event_history

set end_time = now(3), is_success =

isnull(v_error), duration = timestampdiff(microsecond,start_time, now(3)) /

1000000

, error_msg

= concat('

error =

', r_code,'

, message =

', r_msg)

where event_gid =

v_event_gid;

end$$

delimiter ;

通過查詢mysql.udf_event_history表,可以知道event的開始結束時間、是否成功、執行時長、錯誤資訊,等,為管理日常排程計畫提供方便。

root@localhost

[db1

]select

*from mysql.udf_event_history limit 2

\g;***************************

1. row ***************************

id:

1db_name

: db1

event_name: event_test1

start_time:

2019-12

-0315:44:00.000

end_time:

2019-12

-0315:44:00.001

is_success:

0duration:

0.001

error_msg: error

=42000, message =

procedure db1.usp_2 does not

exist

event_gid: ab305d8c15a011eab822005056ab041e

***************************

2. row ***************************

id:

2db_name

: db1

event_name: event_test2

start_time:

2019-12

-0315:46:00.000

end_time:

2019-12

-0315:46:05.405

is_success:

1duration:

5.405

error_msg:

null

event_gid: f2b6197c15a011eab822005056ab041e

參考

Better History(歷史記錄)

外掛程式介紹 剛剛看到在網頁上看到一篇好的文章或者正在編輯什麼,不小心一時手賤關掉了網頁,再開啟就找不到了,想必很多朋友經常遇到這樣的事,better history 歷史記錄 讓你更好地檢視您的歷史記錄。為檢視您的歷史記錄帶來最好的搜尋體驗,最清晰的介面和最有幫助的篩選。使用說明 將better ...

Ubuntu 檢視歷史記錄

ubuntu 終端的歷史記錄 在linux終端下 1 執行history,可以得到乙個整潔的linux終端命令歷史記錄的列表 2 執行history c,可以清除雜亂的歷史記錄 3 執行history r home yajiu history.txt,可以將history.txt檔案儲存的常用命令讀...

yum history 歷史記錄功能

現在的 yum 帶有歷史記錄功能,可以檢視過往的事務,重做或回滾這些事務.顯示事務的命令是 yum history 在歷史中搜尋某個軟體包是 yum history list x 顯示某個事務的詳細資訊用 yum history info n n是事務編號,重做是 yum history redo ...