mysql中的事件调度器可以定时对数据库增加,删除和执行操作,相当于数据库中的临时触发器,与Linux系统中的执行计划任务一样,这样就可以大大降低工作量.

1.开启事件调度器

[root@node1 ~]# vim /usr/my.cnf         --在配置文件中加入以下语句启用调度器

event_scheduler=1

[root@node1 ~]# /etc/init.d/mysql restart

ERROR! MySQL server PID file could not be found!

Starting MySQL... SUCCESS!

[root@node1 ~]#

2.查看事件调度是否开启

[root@node1 ~]# mysql -u root -p

Enter password:

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.6.21 MySQL Community Server (GPL)

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like "event_%";           --查看调度器是否启用

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

| Variable_name   | Value |

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

| event_scheduler | ON    |

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

1 row in set (0.00 sec)

mysql> ? create event;              --查看创建事件的语法

Name: 'CREATE EVENT'

Description:

Syntax:

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}

mysql> create database test123;

Query OK, 1 row affected (0.00 sec)

mysql> \u test123

Database changed

mysql>

3.创建事件调度5秒钟后创建t表

mysql> create event if not exists event_t on schedule at current_timestamp + interval 5 second  do create table t (a int,b nchar(10),c timestamp);

Query OK, 0 rows affected (0.00 sec)

mysql> show events;        --查看事件是否创建成功

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

| Db      | Name     | Definer        | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |

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

| test123 | event_t1 | root@localhost | SYSTEM    | RECURRING | NULL       | 5              | SECOND         | 2014-11-12 15:29:13 | NULL | ENABLED |          0 | utf8                 | utf8_general_ci      | latin1_swedish_ci  |

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

1 row in set (0.00 sec)

mysql> show tables;

Empty set (0.00 sec)

mysql> show tables;               --创建表成功

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

| Tables_in_test123 |

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

| t                 |

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

1 row in set (0.00 sec)

mysql> desc t;

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

| Field | Type      | Null | Key | Default           | Extra                       |

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

| a     | int(11)   | YES  |     | NULL              |                             |

| b     | char(10)  | YES  |     | NULL              |                             |

| c     | timestamp | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |

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

3 rows in set (0.01 sec)

mysql>

4.创建事件调度每5秒在表中插入数据

mysql> create event if not exists event_t1 on schedule every  5 second  do insert into t values(1,1,sysdate());

Query OK, 0 rows affected (0.01 sec)

mysql> select * from t;           --查看事件执行数据

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

| a    | b    | c                   |

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

|    1 | 1    | 2014-11-12 15:33:31 |

|    1 | 1    | 2014-11-12 15:33:36 |

|    1 | 1    | 2014-11-12 15:33:41 |

|    1 | 1    | 2014-11-12 15:33:46 |

|    1 | 1    | 2014-11-12 15:33:51 |

|    1 | 1    | 2014-11-12 15:33:56 |

|    1 | 1    | 2014-11-12 15:34:01 |

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

7 rows in set (0.00 sec)

mysql>

5.创建事件调度10秒钟后删除t表中所有数据

mysql> create event if not exists event_t2 on schedule every  10  second  do truncate table t;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t;

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

| a    | b    | c                   |

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

|    1 | 1    | 2014-11-12 15:36:36 |

|    1 | 1    | 2014-11-12 15:36:41 |

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

2 rows in set (0.00 sec)

mysql> select * from t;

Empty set (0.00 sec)

mysql>

6.在指定时间删除t表数据

mysql> create event if not exists event_t2 on schedule at timestamp '2014-11-12 15:39:00' do truncate table t;;

Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> select * from t;

Empty set (0.00 sec)

mysql>

7.创建事件调度每天删除t表数据

mysql> create event if not exists event_t2 on schedule every 1 day  do truncate table t;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> select * from t;

Empty set (0.00 sec)

mysql>

8.创建事件调度5天后开启删除t表中数据,一个月后停止

mysql> create event if not exists event_t2 on schedule every 1 day  starts current_timestamp + interval 5 day ends current_timestamp + interval 1 month do truncate table t;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>

9.禁用事件调度器

mysql> alter  event event_t2 disable;

Query OK, 0 rows affected (0.00 sec)

mysql>

10.启用事件调度器

mysql> alter  event event_t2 enable;

Query OK, 0 rows affected (0.00 sec)

mysql>

11.修改事件调度器10天后启用

mysql> alter  event event_t2 on schedule every 10 day;

Query OK, 0 rows affected (0.00 sec)

mysql>

12.重命名事件调度器

mysql> alter event event_t2 rename to event_t1;

Query OK, 0 rows affected (0.00 sec)

mysql>

13.查看事件调度器的信息

mysql> show events like "event_t1" \G;

*************************** 1. row ***************************

Db: test123

Name: event_t1

Definer: root@localhost

Time zone: SYSTEM

Type: RECURRING

Execute at: NULL

Interval value: 10

Interval field: DAY

Starts: 2014-11-12 15:47:31

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)

ERROR:

No query specified

mysql>

14.查看事件调度器的内容

mysql> show create event event_t1 \G;

*************************** 1. row ***************************

Event: event_t1

sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

time_zone: SYSTEM

Create Event: CREATE DEFINER=`root`@`localhost` EVENT `event_t1` ON SCHEDULE EVERY 10 DAY STARTS '2014-11-12 15:47:31' ON COMPLETION NOT PRESERVE ENABLE DO truncate table t

character_set_client: utf8

collation_connection: utf8_general_ci

Database Collation: latin1_swedish_ci

1 row in set (0.00 sec)

ERROR:

No query specified

mysql>

mysql中的事件调度器可以定时对数据库增加,删除和执行操作,相当于数据库中的临时触发器,与Linux系统中的执行计划任务一样,这样就可以大大降低工作量.1.开启事件调度器[root@node1 ~]# vim /usr/my.cnf --在配置文件中加入以下语句启用调度器event_scheduler=1[root@node1 ~]# /etc/init.d/mysql rest...
event 事件 事件 event )是 MySQL 在相应的时刻调用的过程式 数据库 对象。一个 事件 可调用一次,也可 周期性的启动,它由一个特定的线程来管理的,也就是所谓的“ 事件 调度 器”。 事件 和触发器类似,都是在某些事情发生的时候启动。当 数据库 上启动一条语句的时候,触发 器就启动了,而 事件 是根据 调度 事件 来启动的。由于他们彼此相似,所以 事件 也称为临时性触发 事件 取代了原先只能由操作系统的计划任务来执行的工作,而且 MySQL 事件 调度 器可以精确 到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CR
要使用 MySQL 事件 调度 器,需要执行以下步骤: 1. 首先,需要在 MySQL 服务器上启用 事件 调度 器。可以通过修改 MySQL 的配置文件来启用 事件 调度 器,或者在 MySQL 服务器的命令行中运行以下命令: SET GLOBAL event _scheduler = ON; 2. 然后,就可以使用 MySQL 的 `CREATE EVENT ` 语句来创建一个 事件 事件 事件 名称、开始时间、结束时间和执行的动作组成。例如,可以使用以下语句来创建一个每天凌晨 2 点执行的 事件 : ```sql CREATE EVENT my event ON SCHEDULE EVERY 1 DAY STARTS '2022-01-01 02:00:00' BEGIN -- 这里是 事件 执行的动作 3. 最后,可以使用 `SHOW EVENT S` 命令来查看 MySQL 服务器上的所有 事件 ,或者使用 `ALTER EVENT ` 命令来修改 事件 的定义,使用 `DROP EVENT ` 命令来删除 事件 。 请注意, MySQL 事件 调度 器只在 MySQL 服务器运行时才会执行 事件 。如果 MySQL 服务器停止运行,则 事件 调度 器也会停止工作,并在 MySQL 服务器重新启动时继续工作。