Original post: http://anothermysqldba.blogspot.com/2013/05/using-mysql-event-scheduler.html
MySQLã®ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ãƒ¼ã¯ã€ã‚ãªãŸãŒãれらを必è¦ã¨ã™ã‚‹ãªã©ã€ã•ã¾ã–ã¾ãªã‚‚ã®ã‚’スケジュールã™ã‚‹ãŸã‚ã®éžå¸¸ã«åŠ¹æžœçš„ã§ã™ã€‚
以下ã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ï¼†ã‚¹ãƒ¬ãƒ¼ãƒ–全体ã§ç•°ãªã‚‹ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã‚’使用ã™ã‚‹æ–¹æ³•もイベントを使用ã™ã‚‹æ–¹æ³•ã®ç°¡å˜ãªä¾‹ã§ã™ã€‚
ã¾ãšã€ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã—ã¾ã™ã€‚
ã‚ãªãŸã«ãれを回ã™ãŸã‚ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã‹ã€ã¾ãŸã€ã‚ãªãŸã®my.cnfファイル内ã§è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
ç§ã¯ã¡ã‚‡ã†ã©ã“ã®ãƒ‡ãƒ¢ç”¨ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™
マスター上ã®ãƒ†ã‚¹ãƒˆã®ãŸã‚ã«ç§ã¯events_testデータベースã«ã€ã“ã®å˜ç´”ãªãƒ†ãƒ¼ãƒ–ルを使用ã—ã¾ã™ã€‚
ç§ã¯ã‚¤ãƒ™ãƒ³ãƒˆã«ãれをプッシュã™ã‚‹å‰ã«ç°¡å˜ã«æ‰‹é †ã‚’テストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ç§ã®ã‚¤ãƒ™ãƒ³ãƒˆã¯ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã‚’実行ã—ã¦ã‚‚らã„ãŸã„。
今ã€ç§ã¯ã“ã®ãƒ‡ãƒ¢ã®ãŸã‚ã«æ¯Žåˆ†ã“ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’実行ã—ã¦ã„ã‚‹ã ã‚ã†
ãれãŒã‚·ã‚¹ãƒ†ãƒ ã«ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚
ç§ã¯ã¾ãŸã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ã‚¤ãƒ™ãƒ³ãƒˆã‚’作æˆã—ã€ç§ã¯ç§ãŒã‚ªãƒ•ã«ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’行ã†ä¸Šã§è¨ˆç”»ã—ã¦ã„ã‚‹ã®ã§ã€‚ ã ã‹ã‚‰ç§ã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–サーãƒä¸Šã®ã‚¤ãƒ™ãƒ³ãƒˆmastereventtestãŒå¤‰æ›´ã•れã¾ã™ã€‚
ç§ã¯å†ã³è¤‡è£½ã•れãŸevents_testデータベースã€ä¸‹ã ã‘スレーブ上ã®åˆ¥ã®ãƒ†ãƒ¼ãƒ–ルを作æˆã—ã¾ã™
å†ã³ç§ã¯ã‚¤ãƒ™ãƒ³ãƒˆã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®æ‰‹é †ã‚’作æˆã—ãŸã„。 ã“れã¯å¿…é ˆã§ã¯ã‚りã¾ã™ãŒã€ãŸã ãれãŒç°¡å˜ã«ãƒ†ã‚¹ãƒˆã™ã‚‹ã“ã¨ã«ãªã‚‹ã•れã¦ã„ã¾ã›ã‚“。
ã“れã¯ç§ãŒã‚¹ãƒ¬ãƒ¼ãƒ–上ã§å®Ÿè¡Œã‚¤ãƒ™ãƒ³ãƒˆã«ãªã‚‹ã ã‚ã†
ã¾ãŸã€ã‚·ã‚¹ãƒ†ãƒ ã«ãれを作ã£ã¦ã„ã‚‹ã“ã¨ã‚’確èª
ã¾ãŸã€ã‚¤ãƒ™ãƒ³ãƒˆæƒ…å ±ã®æƒ…å ±ã‚¹ã‚ーマを照会ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™
イベントをデãƒãƒƒã‚°ã™ã‚‹ã«ã¯ã€ç¢ºèªã™ã‚‹æœ€å–„ã®å ´æ‰€ã¯ã€ã‚ãªãŸã®ã‚¨ãƒ©ãƒ¼ãƒã‚°ã§ã™ã€‚
ã‚ãªãŸã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–上ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’ãƒã‚§ãƒƒã‚¯ã—ãŸã¨ãã«ä¸¡æ–¹ã®ã‚¤ãƒ™ãƒ³ãƒˆãŒè¡¨ç¤ºã•れã¦ã„ã‚‹ã“ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„
今ã€ãれã¯å‹•作ã—ãŸã®ã§ã™ã‹ï¼Ÿ
ã‚ãªãŸã¯ã‚·ãƒ§ãƒ¼PROCESSLISTを実行ã™ã‚‹ã¨æ¬¡ã®ã‚ˆã†ã«è¡¨ç¤ºã§ãるよã†ã«ãªã‚Šã€ç¾åœ¨ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ãƒ¬ãƒƒãƒ‰ã®çŠ¶æ…‹ã‚’ã—ã¦ã€ã“ã“ã§çŠ¶æ…‹çµæžœã«ã¤ã„ã¦ã®è©³ç´°ã‚’èªã‚€ã“ã¨ãŒã§ãã¾ã™ï¼š
ã‚ãªãŸãŒè¦‹ã¦ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™æ¬¡ã®èµ·å‹•ã‚’å¾…ã¤
ç§ã¯ã¾ãŸã€ãƒ†ãƒ¼ãƒ–ルã«çµæžœã‚’æŒã£ã¦ã„る:
イベントを削除ã™ã‚‹ã‹ç„¡åйã«ã™ã‚‹ã«ã¯ï¼š
mastereventtest EXISTSå ´åˆã«ã‚¤ãƒ™ãƒ³ãƒˆã‚’DROP;
無効ã«ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆmastereventtestã®ALTER;
PlanetMySQL Voting: Vote UP / Vote DOWN
MySQLã®ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ãƒ¼ã¯ã€ã‚ãªãŸãŒãれらを必è¦ã¨ã™ã‚‹ãªã©ã€ã•ã¾ã–ã¾ãªã‚‚ã®ã‚’スケジュールã™ã‚‹ãŸã‚ã®éžå¸¸ã«åŠ¹æžœçš„ã§ã™ã€‚
以下ã¯ã€ãƒžã‚¹ã‚¿ãƒ¼ï¼†ã‚¹ãƒ¬ãƒ¼ãƒ–全体ã§ç•°ãªã‚‹ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã‚’使用ã™ã‚‹æ–¹æ³•もイベントを使用ã™ã‚‹æ–¹æ³•ã®ç°¡å˜ãªä¾‹ã§ã™ã€‚
ã¾ãšã€ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒ©ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’確èªã—ã¾ã™ã€‚
> show variables like '%event%';
+---------------------------------------------------+-------+
| Variable_name | Value |
+---------------------------------------------------+-------+
| event_scheduler | OFF |
| performance_schema_events_waits_history_long_size | 10000 |
| performance_schema_events_waits_history_size | 10 |
+---------------------------------------------------+-------+
ã‚ãªãŸã«ãれを回ã™ãŸã‚ã«ã¯ã€æ¬¡ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’使用ã™ã‚‹ã‹ã€ã¾ãŸã€ã‚ãªãŸã®my.cnfファイル内ã§è¨å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚
set GLOBAL event_scheduler=ON;
ç§ã¯ã¡ã‚‡ã†ã©ã“ã®ãƒ‡ãƒ¢ç”¨ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’作æˆã—ã¾ã™
create database events_test;
use events_test;
マスター上ã®ãƒ†ã‚¹ãƒˆã®ãŸã‚ã«ç§ã¯events_testデータベースã«ã€ã“ã®å˜ç´”ãªãƒ†ãƒ¼ãƒ–ルを使用ã—ã¾ã™ã€‚
CREATE TABLE `foobar` (
`time_recorded` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
ç§ã¯ã‚¤ãƒ™ãƒ³ãƒˆã«ãれをプッシュã™ã‚‹å‰ã«ç°¡å˜ã«æ‰‹é †ã‚’テストã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã®ã§ã€ç§ã®ã‚¤ãƒ™ãƒ³ãƒˆã¯ã‚¹ãƒˆã‚¢ãƒ‰ãƒ—ãƒã‚·ãƒ¼ã‚¸ãƒ£ã‚’実行ã—ã¦ã‚‚らã„ãŸã„。
delimiter //
CREATE PROCEDURE mastereventtest()
BEGIN
insert into foobar values (NOW());
END//
delimiter ;
今ã€ç§ã¯ã“ã®ãƒ‡ãƒ¢ã®ãŸã‚ã«æ¯Žåˆ†ã“ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’実行ã—ã¦ã„ã‚‹ã ã‚ã†
CREATE EVENT mastereventtest
ON SCHEDULE EVERY 1 MINUTE
COMMENT 'testing master events'
DO
call mastereventtest();
ãれãŒã‚·ã‚¹ãƒ†ãƒ ã«ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¾ã™ã€‚
> show create event mastereventtest\G
*************************** 1. row ***************************
Event: mastereventtest
sql_mode: NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
time_zone: SYSTEM
Create Event: CREATE DEFINER=`root`@`localhost` EVENT `mastereventtest` ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-12 21:25:22' ON COMPLETION NOT PRESERVE ENABLE COMMENT 'testing master events' DO call mastereventtest()
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
> show events \G
*************************** 1. row ***************************
Db: events_test
Name: mastereventtest
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 1
Interval field: MINUTE
Starts: 2013-05-12 21:25:22
Ends: NULL
Status: ENABLED
Originator: 1
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
ç§ã¯ã¾ãŸã€ã‚¹ãƒ¬ãƒ¼ãƒ–ã§ã‚¤ãƒ™ãƒ³ãƒˆã‚’作æˆã—ã€ç§ã¯ç§ãŒã‚ªãƒ•ã«ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆã‚’無効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’行ã†ä¸Šã§è¨ˆç”»ã—ã¦ã„ã‚‹ã®ã§ã€‚ ã ã‹ã‚‰ç§ã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–サーãƒä¸Šã®ã‚¤ãƒ™ãƒ³ãƒˆmastereventtestãŒå¤‰æ›´ã•れã¾ã™ã€‚
ALTER EVENT mastereventtest disable on slave;
ç§ã¯å†ã³è¤‡è£½ã•れãŸevents_testデータベースã€ä¸‹ã ã‘スレーブ上ã®åˆ¥ã®ãƒ†ãƒ¼ãƒ–ルを作æˆã—ã¾ã™
CREATE TABLE `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
);
å†ã³ç§ã¯ã‚¤ãƒ™ãƒ³ãƒˆã§ä½¿ç”¨ã™ã‚‹ãŸã‚ã®æ‰‹é †ã‚’作æˆã—ãŸã„。 ã“れã¯å¿…é ˆã§ã¯ã‚りã¾ã™ãŒã€ãŸã ãれãŒç°¡å˜ã«ãƒ†ã‚¹ãƒˆã™ã‚‹ã“ã¨ã«ãªã‚‹ã•れã¦ã„ã¾ã›ã‚“。
delimiter //
CREATE PROCEDURE slaveeventtest()
BEGIN
insert into foo values ();
END//
delimiter ;
ã“れã¯ç§ãŒã‚¹ãƒ¬ãƒ¼ãƒ–上ã§å®Ÿè¡Œã‚¤ãƒ™ãƒ³ãƒˆã«ãªã‚‹ã ã‚ã†
CREATE EVENT slaveeventtest
ON SCHEDULE EVERY 2 MINUTE
COMMENT 'testing master events'
DO
call slaveeventtest();
ã¾ãŸã€ã‚·ã‚¹ãƒ†ãƒ ã«ãれを作ã£ã¦ã„ã‚‹ã“ã¨ã‚’確èª
> show create event slaveeventtest\G
*************************** 1. row ***************************
Event: slaveeventtest
sql_mode: NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
time_zone: SYSTEM
Create Event: CREATE DEFINER=`root`@`localhost` EVENT `slaveeventtest` ON SCHEDULE EVERY 2 MINUTE STARTS '2013-05-12 21:14:08' ON COMPLETION NOT PRESERVE ENABLE COMMENT 'testing master events' DO call slaveeventtest()
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
> show events\G
Db: events_test
Name: slaveeventtest
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 2
Interval field: MINUTE
Starts: 2013-05-12 21:14:08
Ends: NULL
Status: ENABLED
Originator: 3
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
ã¾ãŸã€ã‚¤ãƒ™ãƒ³ãƒˆæƒ…å ±ã®æƒ…å ±ã‚¹ã‚ーマを照会ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™
> select * from information_schema.EVENTS\G
イベントをデãƒãƒƒã‚°ã™ã‚‹ã«ã¯ã€ç¢ºèªã™ã‚‹æœ€å–„ã®å ´æ‰€ã¯ã€ã‚ãªãŸã®ã‚¨ãƒ©ãƒ¼ãƒã‚°ã§ã™ã€‚
ã‚ãªãŸã¯ã€ã‚¹ãƒ¬ãƒ¼ãƒ–上ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’ãƒã‚§ãƒƒã‚¯ã—ãŸã¨ãã«ä¸¡æ–¹ã®ã‚¤ãƒ™ãƒ³ãƒˆãŒè¡¨ç¤ºã•れã¦ã„ã‚‹ã“ã¨ã«ç•™æ„ã—ã¦ãã ã•ã„
> > show events \G
*************************** 1. row ***************************
Db: events_test
Name: mastereventtest
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 1
Interval field: MINUTE
Starts: 2013-05-12 21:25:22
Ends: NULL
Status: SLAVESIDE_DISABLED
Originator: 3
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
Db: events_test
Name: slaveeventtest
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 2
Interval field: MINUTE
Starts: 2013-05-12 21:14:08
Ends: NULL
Status: ENABLED
Originator: 3
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
2 rows in set (0.01 sec)
今ã€ãれã¯å‹•作ã—ãŸã®ã§ã™ã‹ï¼Ÿ
ã‚ãªãŸã¯ã‚·ãƒ§ãƒ¼PROCESSLISTを実行ã™ã‚‹ã¨æ¬¡ã®ã‚ˆã†ã«è¡¨ç¤ºã§ãるよã†ã«ãªã‚Šã€ç¾åœ¨ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚¹ãƒ¬ãƒƒãƒ‰ã®çŠ¶æ…‹ã‚’ã—ã¦ã€ã“ã“ã§çŠ¶æ…‹çµæžœã«ã¤ã„ã¦ã®è©³ç´°ã‚’èªã‚€ã“ã¨ãŒã§ãã¾ã™ï¼š
ã‚ãªãŸãŒè¦‹ã¦ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™æ¬¡ã®èµ·å‹•ã‚’å¾…ã¤
ç§ã¯ã¾ãŸã€ãƒ†ãƒ¼ãƒ–ルã«çµæžœã‚’æŒã£ã¦ã„る:
root@localhost [events_test]> select * from foobar;
+---------------------+
| time_recorded |
+---------------------+
| 2013-05-12 21:25:22 |
| 2013-05-12 21:26:22 |
| 2013-05-12 21:27:22 |
| 2013-05-12 21:28:22 |
| 2013-05-12 21:29:22 |
| 2013-05-12 21:30:22 |
| 2013-05-12 21:31:22 |
| 2013-05-12 21:32:22 |
+---------------------+
8 rows in set (0.00 sec)
root@localhost [events_test]> select * from foo;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
+----+
8 rows in set (0.00 sec)
イベントを削除ã™ã‚‹ã‹ç„¡åйã«ã™ã‚‹ã«ã¯ï¼š
mastereventtest EXISTSå ´åˆã«ã‚¤ãƒ™ãƒ³ãƒˆã‚’DROP;
無効ã«ã™ã‚‹ã‚¤ãƒ™ãƒ³ãƒˆmastereventtestã®ALTER;
PlanetMySQL Voting: Vote UP / Vote DOWN