Mysqlイベント(タイミングタスク)

3833 ワード

mysql作成タスク(イベント)
1、event_scheduler=NO表示SHOW VARIABLES LIKE‘event_scheduler’; 2、タスク(イベント)a、set global event_を開くscheduler=1;     b、SET GLOBAL event_scheduler = ON; c、my.cnfの[mysqld]部分にevent_を追加scheduler=ONしてmysqlを再起動します.3、イベントSET GLOBAL eventを閉じるscheduler = OFF; 4、文法:
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}

パラメータ詳細:DEFINER:イベント実行時に権限をチェックするユーザを定義します.ON SCHEDULE schedule:実行時間と時間間隔を定義します.ON COMPLETION[NOT]PRESERVE:イベントが1回実行されるか、永久実行されるかを定義し、デフォルトは1回実行、すなわちNOT PRESERVEである.ENABLE|DISABLE|DISABLE ON SLAVE:イベントが作成された後に開くか閉じるか、上から閉じるかを定義します.サーバからホスト上の作成イベントを自動的に同期させる文であれば、DISABLE ON SLAVEが自動的に加算されます.COMMENT‘comment’:イベントのコメントを定義します.5、イベントを開くalter event event_name(イベント名)ON COMPLETION PRESERVE ENABLE;6、イベントalter event event_を閉じるname(イベント名)ON COMPLETION PRESERVE DISABLE;7、削除イベントDROP EVENT[IF EXISTS]event_name(イベント名)8、ケース
   :
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `t1` datetime DEFAULT NULL,
  `id2` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=106 DEFAULT CHARSET=utf8


CREATE EVENT IF NOT EXISTS e_test_1 ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO INSERT INTO test(id,t1) VALUES(NULL,NOW());

CREATE EVENT IF NOT EXISTS e_test_2
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
DO TRUNCATE TABLE test;

1、    
CREATE PROCEDURE pro_test()
    BEGIN
        INSERT INTO test(id,t1,id2) VALUES(NULL,NOW(),'1000000');
    END
2、    
CREATE EVENT IF NOT EXISTS e_test_3 ON SCHEDULE EVERY 3 SECOND
ON COMPLETION PRESERVE
DO CALL pro_test();
#   
CREATE DEFINER=`root`@`%` EVENT `e_create_partition` ON SCHEDULE EVERY 1 MINUTE 
STARTS '2019-07-17 19:50:00' ENDS '2019-07-17 19:55:00' 
ON COMPLETION PRESERVE DISABLE DO CALL proc_create_partition_all()

9、イベントの権限の問題について(Access denied for user'root'@'%'to database'xxxx')Naicat Premiumリモート接続のmysqlを使用して新しいデータベースと新しいユーザーを作成した後、そのユーザーにこの新しいデータベース権限を追加すると、access denied for user'root'@'%'to database xxxxxのプロンプトが表示されます.エラーの原因はrootユーザーがリモートで接続していることです.受信したMYSQLには、この新しいデータベースの許可はありません.mysqlをローカルで使用する場合、この問題は存在しないはずです.解決方法:
 UPDATE mysql.user SET Event_priv = 'Y' WHERE HOST='%' AND USER='root';
 FLUSH PRIVILEGES;
 grant all PRIVILEGES on xxxx.* to root@'%' identified by 'password' with grant option;
 grant all on xxxx.* to 'root'@'%' identified by 'password' with grant option; 

xxxxは作成されたデータベースであり、passwordはrootのパスワードである.実際の要求通りに変更してください.
10、サイクルまたはポイントシンタックスon schedule every 1 secondを1秒ごとに実行
10日後にon schedule at current_を実行timestamp + interval 10 day
指定日時実行on schedule at timestamp‘2016-08-16 00:00:00’
毎日午前3時にon schedule every 1 daystarts‘2016-05-18 03:00:00’を実行(翌日午前3時から設定)
毎日定時に実行し、5日後にon schedule every 1 dayends current_の実行を停止します.timestamp + interval 5 day
5日後に毎日定時クリアtestテーブルを開き、1ヶ月後にon schedule every 1 daystarts current_の実行を停止します.timestamp + interval 5 dayends current_timestamp + interval 1 month