• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償

    Mysql任務調度Event不執行解決方法

    出現Mysql任務調度Event不執行的時候,小編采用的方法如下:

    方法一:找到當前使用的 .cnf 文件,在 [mysqld] 的下面加入如下行

    event_scheduler=1 。

    MySQL5.1.x 版本中引入了一項新特性 EVENT ,顧名思義就是事件、定時任務機制,在指定的時間單元內執行特定的任務,因此今后一些對數據定時性操作不再依賴外部程序,而直接使用數據庫本身提供的功能。此功能是對 Oracle 的 Job/Schedule 的模仿, 5.1.X 版本以上才支持。

    創建 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 sql_statement;


    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}

    例如創建一個每 30 秒清空 tableA 數據的任務

    CREATE EVENT E_DELETE_ASO_TOKEN ON SCHEDULE EVERY 30 SECOND DO DELETE FROM tableA ;

    默認 EVENT 支持是沒有啟動的,可以通過下面的命令來查看狀態:

    Select @@event_scheduler;

    如果返回 OFF ,則需要執行下面的命令啟動:

    SET GLOBAL event_scheduler = ON;

    好了,上面雖然啟動了 EVENT ,但是每次重啟 mysql 之后 EVENT 并沒有自動啟動,那么如何讓它自動啟動呢?

    方法一:找到當前使用的 .cnf 文件,在 [mysqld] 的下面加入如下行:

    event_scheduler=1

    方法二:啟動 mysql 的時候增加 --event_scheduler=1

    mysql start --event_scheduler=1

    事件詳細語法事例 (EVENT)

    1> 創建事件 (CREATE EVENT)

    先來看一下它的語法:

    CREATE EVENT [IF NOT EXISTS] event_name

    ON SCHEDULE schedule

    [ON COMPLETION [NOT] PRESERVE]

    [ENABLE | DISABLE]

    [COMMENT ''comment'']

    DO sql_statement;


    schedule:

    AT TIMESTAMP [+ INTERVAL INTERVAL]

    | EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]


    INTERVAL:

    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |

    WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |

    DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

    1) 首先來看一個簡單的例子來演示每秒插入一條記錄到數據表

    USE test;

    CREATE TABLE aaa (timeline TIMESTAMP);

    CREATE EVENT e_test_insert

    ON SCHEDULE EVERY 1 SECOND

    DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

    等待 3 秒鐘后,再執行查詢看看:

    mysql> SELECT * FROM aaa;

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

    | timeline            |

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

    | 2007-07-18 20:44:26 |

    | 2007-07-18 20:44:27 |

    | 2007-07-18 20:44:28 |

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

    2) 5 天后清空 test 表:

    CREATE EVENT e_test

    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY

    DO TRUNCATE TABLE test.aaa;

    3) 2007 年 7 月 20 日 12 點整清空 test 表:

    CREATE EVENT e_test

    ON SCHEDULE AT TIMESTAMP ''2007-07-20 12:00:00''

    DO TRUNCATE TABLE test.aaa;

    4) 每天定時清空 test 表:

    CREATE EVENT e_test

    ON SCHEDULE EVERY 1 DAY

    DO TRUNCATE TABLE test.aaa;

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

    CREATE EVENT e_test

    ON SCHEDULE EVERY 1 DAY

    STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

    DO TRUNCATE TABLE test.aaa;

    6) 每天定時清空 test 表, 5 天后停止執行:

    CREATE EVENT e_test

    ON SCHEDULE EVERY 1 DAY

    ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

    DO TRUNCATE TABLE test.aaa;

    7) 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;

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

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

    CREATE EVENT e_test

    ON SCHEDULE EVERY 1 DAY

    ON COMPLETION NOT PRESERVE

    DO TRUNCATE TABLE test.aaa;

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

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

    2> 修改事件 (ALTER EVENT)

    ALTER EVENT event_name

    [ON SCHEDULE schedule]

    [RENAME TO new_event_name]

    [ON COMPLETION [NOT] PRESERVE]

    [COMMENT ''comment''][ENABLE | DISABLE]

    [DO sql_statement]

    1) 臨時關閉事件

    ALTER EVENT e_test DISABLE;

    2) 開啟事件

    ALTER EVENT e_test ENABLE;

    3) 將每天清空 test 表改為 5 天清空一次:

    ALTER EVENT e_test

    ON SCHEDULE EVERY 5 DAY;

    3> 刪除事件 (DROP EVENT)

    語法很簡單,如下所示:

    DROP EVENT [IF EXISTS] event_name

    例如刪除前面創建的 e_test 事件

    DROP EVENT e_test;

    當然前提是這個事件存在,否則會產生 ERROR 1513 (HY000): Unknown event 錯誤,因此最好加上 IF EXISTS

    DROP EVENT IF EXISTS e_test;

    上一篇>>srv記錄是什么?有哪些用處? 下一篇>>無

    分享到:
  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1-20183354
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 網絡版權侵權舉報電話:0371-60135995
  • 警情提示:注意防范電信網絡詐騙
  • 專注服務器托管25年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2025 ENKJ All Rights Reserved 地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師  B1-20183354   京公網安備41019702002023號 
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線