我想问一下在MySql事件调度程序中防止多个实例同时执行的问题。以下代码是我的事件调度程序:
CREATE EVENT WalletDequeue_Event
ON SCHEDULE
EVERY 2 MINUTE
COMMENT 'Update lotte_wallet data with wallet_queue_mngt data.'
DO
CALL walletDequeue();
我搜索过防止多个实例同时与google一起执行,答案是"你应该建立一个机制来阻止同时发生的实例。例如,您可以使用GET_LOCK()函数或行或表锁定。"。
有人能告诉我怎么做吗?
祝你好运, Phanna
答案 0 :(得分:1)
虽然这个问题有点陈旧,但我会在这里为一种可能的方法添加答案以供将来参考。
下面的文章解释了如何使用MySQL GET_LOCK和RELEASE_LOCK函数来防止同时发生同一事件的多个实例。 https://www.percona.com/blog/2015/02/25/using-mysql-event-scheduler-and-how-to-prevent-contention/
文章中的示例代码:
DELIMITER //
CREATE EVENT testlock_event ON SCHEDULE EVERY 2 SECOND DO
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
DO RELEASE_LOCK('testlock_event');
END;
IF GET_LOCK('testlock_event', 0) THEN
-- add some business logic here, for example:
-- insert into test.testlock_event values(NULL, NOW());
END IF;
DO RELEASE_LOCK('testlock_event');
END;
//
DELIMITER ;