mysqlでeventが無効になった場合

1824 ワード

mysqlのタイミングでトリガーされたeventが作成された後、予定されたイベントは発生しませんでしたが、以下のようにまとめられています.
1.グローバルイベントはオフです.
実はmysqlのeventのデフォルトはoffです
イベントが開いているかどうかを確認します:show variables like'event_scheduler';
イベントイベント計画を開く:set global event_scheduler=1;
イベントがしばらく実行され、コンピュータが再起動すると、イベントが無効になることがあります.生産環境ではこのようなことは許されない.
どうしよう?
------システム再起動後、eventが自動的に閉じる解決方法------my.ini(windows) or my.cnf(linux)の[mysqld]にevent_を追加scheduler=ON
 
 
2.ユーザー権限の変更によりeventが失効し、
このようなことはめったにありませんが、発生後も問題が見つからないので、あなたが建てたeventの所属者がこの実行権限を持っているかどうかを見てみましょう.
如:DEFINER=`root`@`127.0.0.1`
    select * from mysql.user where Host='127.0.0.1'
127.0.0.1このipが実行する権限があるかどうかを確認します
 
3.eventはDISABLEに設定されています.この場合
ここでtest_イベントの例:
イベントタスクを閉じる:alter event test_event ON COMPLETION PRESERVE DISABLE; 口座開設イベントタスク:alter event test_event ON COMPLETION PRESERVE ENABLE;
すべてのイベントを表示:SHOW EVENTS;
またはselect*from information_schema.EVENTS;
 
 
======================================
簡単なテスト例:
--テーブルの作成
DROP table IF EXISTS `tab1`;
create table tab1(
tab1_id varchar(20) default '',
insert_time datetime default 0,
num int default 0
);

insert into tab1 values('abc',now(),0);

 
--ストアド・プロシージャの作成
drop procedure IF EXISTS testcount;
DELIMITER $$
CREATE  PROCEDURE `testCount`()
BEGIN
DECLARE  num1 integer default 0;
   select num into num1 FROM tab1 WHERE tab1_id='abc';
if num1<50 then
     UPDATE tab1 SET NUM=NUM+1 WHERE tab1_id='abc';
end if;
END$$
DELIMITER ;

 
 
 
 
--タイミング実行イベントの作成
CREATE EVENT if not exists e_test
          on schedule every 1 minute
          on completion preserve
     do call testCount();