Kategoria: (MySQL) Autor: Gabrym Data 15 sty 2010

Oto kilka przykładów użycia crona w bazie MySQL.
Powiedzmy że mamy do przebudowania tabelę często używaną z dużą ilością rekordów.
Oczywiście najlepiej zrobić to w nocy kiedy ruch maleje a co za tym idzie serwer ma większy zapas mocy.

Możemy przeprowadzić to na kilka sposobów:
- ustawić budzik na właściwą godzinę, ;)
- za pomoca linuksowego cron-a,
- wbudowanego mechanizmu event scheduler.

Zobaczmy kilka przykładów z użyciem zaplanowanych zadań (opcja trzecia).

Jednorazowe zadania:


-- event zaplanowany na konkretną godzinę.
CREATE EVENT event_alter
 ON SCHEDULE AT TIMESTAMP '2010-01-16 04:00:01'
 DO alter table tab_name change `nazwa` `nazwa` varchar(100) NOT NULL;

-- event ma się wykonać za 7 godzin od czasu stworzenia go.
CREATE EVENT event_alter
 ON SCHEDULE AT TIMESTAMP (NOW() + INTERVAL 7 HOUR)
 DO alter table tab_name change `nazwa` `nazwa` varchar(100) NOT NULL;


Cykliczne zadania:


-- event ma się wykonywać raz dziennie od 2010-01-16 02:30:00.
CREATE EVENT event_delete
 ON SCHEDULE
  EVERY 1 DAY
  STARTS '2010-01-16 02:30:00'
COMMENT 'Event ma skasowac dane starsze niz tydzine'
   DO DELETE FROM tab_name WHERE datetime< (NOW() - INTERVAL 7 DAY);

-- event ma się wykonywać raz dziennie od teraz + 7 godzin.
CREATE EVENT event_delete
 ON SCHEDULE
  EVERY 1 DAY
  STARTS (NOW() + INTERVAL 7 HOUR)
COMMENT 'Event ma skasowac dane starsze niz tydzine'
   DO DELETE FROM tab_name WHERE datetime< (NOW() - INTERVAL 7 DAY);

Tu przykład zadania kasujacego binlogi starszych niż 2 dni.


CREATE EVENT `event_delete_binlogs`
 ON SCHEDULE EVERY 1 DAY
 STARTS '2010-01-16 03:00:01'
 ON COMPLETION NOT PRESERVE ENABLE
 COMMENT 'Event ma za zadanie wyczyscic binlogi 2 dni wstecz'
 DO PURGE BINARY LOGS BEFORE (NOW() - INTERVAL 2 DAY);

Miłego planowania.

http://dev.mysql.com/doc/refman/5.1/en/events-syntax.html

Komentarze dle tego wpisu zostały wyłączone.