Linux-mysql事件調度器

前言:

事件調度器是Mysql5.1後新增的功能,可以將數據庫按自定義的時間週期觸發某種操作,即類似linux系統下的任務調度器crontab。

定義:

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}

說明:中括號中爲可選擇項,可指定任務執行的頻率.

舉例熟悉事件調度器的使用:

1.創建測試表test

mysql> create table test(id1 varchar(10),create_time datetime);
Query OK, 0 rows affected (0.06 sec)

2.創建事件調度器test_event,每隔5秒向test表插入一條記錄

mysql> create event test_event on schedule every 5 second do insert into test.test (id1,create_time) values ('test',now());
Query OK, 0 rows affected (0.06 sec)

3.查看調度器狀態

mysql> show events \G
*************************** 1. row ***************************
                  Db: yibei
                Name: test_event
             Definer: root@localhost
           Time zone: SYSTEM
                Type: RECURRING
          Execute at: NULL
      Interval value: 5
      Interval field: SECOND
              Starts: 2020-04-05 12:41:17
                Ends: NULL
              Status: ENABLED
          Originator: 0
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)

4.間隔幾秒後,查看test表,發現並沒有數據插入

mysql> select * from test;
Empty set (0.02 sec)

5.查看事件調度器狀態

mysql> show variables like '%scheduler%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

注:mysql事件調度器默認是關閉的。

開啓mysql事件調度器的方法:

1)臨時開啓,重啓mysql服務後失效。

mysql> set global event_scheduler = 1; ---(可以將1替換爲on)
Query OK, 0 rows affected (0.00 sec)

2)永久開啓,在my.cnf中的[mysqld]部分添加

event_scheduler=1 ---(需要重啓mysql服務)

#在看上述例子的test表:

mysql> select * from test;
+------+---------------------+
| id1  | create_time         |
+------+---------------------+
| test | 2020-04-05 12:59:27 |
| test | 2020-04-05 12:59:32 |
| test | 2020-04-05 12:59:37 |
| test | 2020-04-05 12:59:42 |
4 rows in set (0.00 sec)

當不在使用事件調度器時,可以禁用(disable)或刪除(drop)

1.禁用event

mysql> alter event test_event disable;
Query OK, 0 rows affected (0.00 sec)

2,刪除event

mysql> drop event test_event;
Query OK, 0 rows affected (0.00 sec)

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章