如何防止mysql中重复执行事件的多个实例

时间:2015-02-17 09:48:56

标签: events scheduler

我想问一下在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

1 个答案:

答案 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 ;