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;
======================================
簡単なテスト例:
--テーブルの作成
--ストアド・プロシージャの作成
--タイミング実行イベントの作成
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();