poniedziałek, 26 grudnia 2011

Mysql Events

Kiedys o tym slyszalem ale ucichlo.
Nie mniej temat dobrze rokuje a zatem :
Pierw configuracja :
SET GLOBAL event_scheduler = 1/0 (ON/OFF)

Mozna tez dopisac na stałe do configu.

Tabela testowa:
CREATE TABLE zdarzenia_test (
  id int(10) NOT NULL AUTO_INCREMENT,
  data timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM

oraz event który będzie wrzucał co 10s wpis :
CREATE EVENT event_first_test ON SCHEDULE EVERY 10 SECOND DO insert into zdarzenia_set set data=now()
wszystko smiga :
mysql> select * from zdarzenia_test order by data desc limit 3;
+-----+---------------------+
| id  | data                |
+-----+---------------------+
| 209 | 2011-12-26 12:22:53 |
| 208 | 2011-12-26 12:22:43 |
| 207 | 2011-12-26 12:22:33 |
+-----+---------------------+
3 rows in set (0.00 sec)


Dobra ale co gdy jakaś akcja się nie uda ?
mysql> drop table zdarzenia_test;
Query OK, 0 rows affected (0.00 sec)
Informacja idzie do error loga :
111226 12:24:33 [ERROR] Event Scheduler: [root@localhost][test.event_first_test] Table 'test.zdarzenia_test' doesn't exist
111226 12:24:33 [Note] Event Scheduler: [root@localhost].[test.event_first_test] event execution failed.
Wszystko fajnie tyle, tylko pewnie nie kazdy lubi sobie czytac error loga wieczorami; )
Zdecydowanie brakuje jakieś możliwosci w stylu wyslij maila (cos na wzor schedule'ra w MSSQL).
Oczywiscie mozemy sobie to jakos obsluzyc skryptowo ale przydałaby sie jakas funkcja systemowa.
Nie mniej jednak sam feature jest dosyc fajny. Nie sadze, zeby szybko zastąpił skrypt w cronie jednak do przeliczania
nie krytycznych danych,czyszczenia tabel nadaje się idealnie.
Oczywiscie to tylko zarys. Istnieje dużo więcej możliwosci konfiguracji (data startu,zakonczenia etc)
Zachęcam do lektury ; )
http://dev.mysql.com/doc/refman/5.1/en/alter-event.html

Brak komentarzy:

Prześlij komentarz