日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 事件 day hour_Mysql事件调度器(Event Scheduler)

發布時間:2023/12/3 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 事件 day hour_Mysql事件调度器(Event Scheduler) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Mysql中的事件調度器Event Scheduler類似于linux下的crontab計劃任務的功能,它是由一個特殊的時間調度線程執行的

一、查看當前是否開啟了event scheduler三種方法:

1) SHOW VARIABLES LIKE ‘event_scheduler’;

2) SELECT @@event_scheduler;

3) SHOW PROCESSLIST;(是否有State為:Waiting for next activation的進程,User為event_scheduler)

二、啟動關閉event scheduler方法:

時間調度器是否開啟由全局變量event_scheduler決定,它有三個可以設定的值: – OFF :

事件調度器是關閉的,調度線程并沒有運行,并且在SHOW PROCESSLIST中不顯示,默認值是OFF – ON

:事件調度器是開啟的,調度線程并沒有運行,并且執行所有的調度事件,通過SHOW PROCESSLIST可以查看Waiting for next

activation的進程 – DISABLED : 設定這個值表示Event Scheduler是被禁止的,無法在Mysql運行狀態下改變其值

注:在Mysql啟動時如果在my.cnf設置了event_scheduler=ON(OFF or 1

or 0)時,就不能在運行時修改撐DISABLED,如果設置event_scheduler=DISABLED時,就不能在運行時修改其值為ON (

OFF or 1 or 0)

mysql> SELECT @@event_scheduler;

+-------------------+

| @@event_scheduler |

+-------------------+

| DISABLED |

+-------------------+

1 row in set (0.00 sec)

mysql> SET @@global.event_scheduler = 1;

ERROR 1290 (HY000): The MySQL server is running with the --event-scheduler=DISABLED or --skip-grant-tables option so it cannot execute this statement

在mysql運行時開啟Event(4種方法均可):

SET GLOBAL event_scheduler = ON;

SET @@global.event_scheduler = ON;

SET GLOBAL event_scheduler = 1;

SET @@global.event_scheduler = 1;

在mysql運行時關閉Event(4種方法均可):

SET GLOBAL event_scheduler = OFF;

SET @@global.event_scheduler = OFF;

SET GLOBAL event_scheduler = 0;

SET @@global.event_scheduler = 0;

三、創建Event:

語法:

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默認是CREATE

EVENT的用戶,可以理解為DEFINER=CURRENT_USER,指該event的用戶,服務器在執行該事件時,使用該用戶來檢查權限;如果設置語法:‘user_name’@‘host_name’,如果當前CREATE

EVENT用戶沒有supser權限,則無法將該event指派給其他用戶;如果有super權限,則可以指定任意存在的用戶,若不存在,時間執行時報錯

IF NOT EXISTS :

如果在同一個schema創建一個已經存在的event_name時不會做任何操作,也不會出錯,但會出現warings:該event已經存在;如果不增加此關鍵詞已經存在的話提示ERROR:

1537 (HY000): Event ‘countsum’ already exists

ON SCHEDULE :用于設置什么時間執行,執行的頻率及執行多久的問題

AT timestamp :表示在給定的datetime或者timestamp的時間執行一次

+ INTERVAL interval:表示從AT timestamp多久之后執行

EVERY interval :有規律的重復執行

[ENABLE | DISABLE]可是設置該事件創建后狀態是否開啟或關閉,默認為ENABLE

[COMMENT ‘comment’]可以給該事件加上注釋。

event創建時間的3周2天后:

AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY

2分鐘10秒:

+ INTERVAL '2:10' MINUTE_SECOND

每6周:

EVERY 6 WEEK

從現在開始30分鐘后每12小時執行一次到從現在到4周后結束執行:

EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK

實例:

前提:創建EVENT的用戶需要只少對應schema的EVENT權限

最基本的create event只需要三個部分:

1. create event關鍵字以及一個event名稱

2. on schedule子句

3. do子句

1. 在創建事件myevent1小時后執行,執行一條更新

CREATE EVENT myevent

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR

DO

UPDATE myschema.mytable SET mycol = mycol + 1;

2.2014年3月20日12點整清空test表:

CREATE EVENT e_test

ON SCHEDULE AT TIMESTAMP '2014-03-20 12:00:00'

DO TRUNCATE TABLE test.aaa;

3.5天后開啟每天定時清空test表:

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

4.每天定時清空test表,5天后停止執行

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

5.5天后開啟每天定時清空test表,一個月后停止執行:

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH

DO TRUNCATE TABLE test.aaa;

6.每天定時清空test表(只執行一次,任務完成后就終止該事件):

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ON COMPLETION NOT PRESERVE

DO TRUNCATE TABLE test.aaa;

[ON COMPLETION [NOT] PRESERVE]可以設置這個事件是執行一次還是持久執行,默認為NOT PRESERVE。

四、修改Event:

ALTER

[DEFINER = { user | CURRENT_USER }]

EVENT event_name

[ON SCHEDULE schedule]

[ON COMPLETION [NOT] PRESERVE]

[RENAME TO new_event_name]

[ENABLE | DISABLE | DISABLE ON SLAVE]

[COMMENT 'comment']

[DO event_body]

說明:

對于任何一個擁有定義在database里面事件的event權限的用戶都可以修改event,并且成功需改后,那個用戶就會成為此event的definer

實例:

CREATE EVENT myevent

ON SCHEDULE

EVERY 6 HOUR

COMMENT 'A sample comment.'

DO

UPDATE myschema.mytable SET mycol = mycol + 1;

將上面的event從開始之后每6個小時執行一次改為從開始4個小時后每12小時執行一次

只修改schedule

ALTER EVENT myevent

ON SCHEDULE

EVERY 12 HOUR

STARTS CURRENT_TIMESTAMP + INTERVAL 4 HOUR;

同時修改schedule和body

ALTER EVENT myevent

ON SCHEDULE

AT CURRENT_TIMESTAMP + INTERVAL 1 DAY

DO

TRUNCATE TABLE myschema.mytable;

關閉、啟動、別名、移動、刪除event:

臨時關閉某個event

ALTER EVENT myevent DISABLE;

開啟某個event

ALTER EVENT myevent ENABLE;

別名某個event

ALTER EVENT olddb.myevent

RENAME TO newdb.myevent;

將myevent從olddb庫移動到newdb庫

ALTER EVENT olddb.myevent

RENAME TO newdb.myevent;

刪除event

DROP EVENT [IF EXISTS] event_name

五、查詢Event信息:

Event信息相關表:

information_schema.events

mysql.event

查看事件的創建信息

show create event countsum \G

查看sem庫的events信息

USE sem;

SHOW EVENTS \G

SHOW EVENTS FROM sem;

總結

以上是生活随笔為你收集整理的mysql 事件 day hour_Mysql事件调度器(Event Scheduler)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。