MySQL Event--Event and EventScheduler

MySQL Event

创建EVENT语法:

CREATE
[DEFINER = { user | CURRENT_USER }]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body; schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...] interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND} ALTER
[DEFINER = { user | CURRENT_USER }]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
[DO event_body] DROP EVENT [IF EXISTS] event_name

DEFINER:指定事件执行时使用的用户账号,当事件执行时,会根据该指定账号的权限来检查事件定于的语句是否有权限执行。如果创建Event时未指定DEFINER,则默认使用创建事件的用户,与显示指定DEFINER=CURRENT_USER相同;

[ON COMPLETION [NOT] PRESERVE]: 默认Event为一次执行,执行完成后即删除,即NOT PERSERVE;如果希望Event在执行完成后也不删除,那么需指定ON COMPLETION PRESERVE选项。

[ENABLE | DISABLE | DISABLE ON SLAVE]: 在MYSQL中,Event和表一样归属于某个schema,如果该schema处于主从复制中,那么在主库创建Event后会同步到从库中,但会默认将从库中Event的状态修改为SLAVESIDE_DISABLED,即在从库上不执行。如果在主库上创建Event时指定DISABLE或DISABLE ON SLAVE,那么主库上的Event不会启用。

MySQL EventScheduler

使用EventScheduler可以实现类似SQL SERVER中Job相同的功能,定期执行特定脚本。

在复制中,可以使用SHOW SLAVE STATUS中的Seconds_Behind_Master来判断当前主库到从库的延迟,但如果主库长时间未更新,则会导致Seconds_Behind_Master的值不准确,因此我们可以使用event_scheduler来定期更新主库中的特定表的数据,以保证主库有定期更新。

操作方法:

-- 首先判断EventScheduler功能是否开启
SHOW VARIABLES LIKE 'event_scheduler'; -- 开启EventScheduler功能
SET GLOBAL event_scheduler=ON; -- 在主库上创建用于监控的表并插入数据:
CREATE TABLE TB_RepMonitor
(
ID INT PRIMARY KEY,
DT DATETIME
);
INSERT INTO TB_RepMonitor VALUES(,NOW()); -- 然后创建event_scheduler来定期更新
DROP EVENT IF EXISTS Event_TB_RepMonitor_Update;
DELIMITER $$;
CREATE DEFINER='root'@'localhost'
EVENT Event_TB_RepMonitor_Update
ON SCHEDULE EVERY SECOND
ENABLE
DO
BEGIN
UPDATE testdb1.TB_RepMonitor SET DT=NOW();
END
$$;
DELIMITER ; -- 查看EVENT的状态
SHOW EVENTS LIKE 'Event_TB_RepMonitor_Update' \G -- 当主库上创建EVENT后,会同步到从库上,并默认将状态修改为SLAVESIDE_DISABLED;
SHOW EVENTS LIKE 'Event_TB_RepMonitor_Update' \G -- 在主库上查看testdb1.TB_RepMonitor表数据'
-- 这样就可以放心使用SHOW SLAVE STATUS中的Seconds_Behind_Master的值了
SELECT *,NOW() FROM testdb1.TB_RepMonitor;

相关操作命令:

##==================================##
##查看数据库中创建的所有作业##
select * from information_schema.events \G; ##==================================##
##启用作业##
ALTER EVENT schema.event_name ENABLE ##==================================##
##禁用作业##
ALTER EVENT schema.event_name DISABLE ##==================================##
##删除作业##
drop event schema.eventname
上一篇:Android 浅谈相机研发


下一篇:Dubbo接口压测