GNU/Linux >> Znalost Linux >  >> Linux

Průvodce událostmi a plánovačem událostí MySQL

Úvod

Události MySQL jsou úlohy, které běží podle uživatelem definovaného plánu . Plánovač událostí je speciální vlákno, které spouští události v naplánovanou dobu.

Události MySQL jsou užitečné, protože usnadňují správu databází a pravidelné provozní úkoly databáze.

V tomto tutoriálu se dozvíte, co jsou události MySQL a jak je nastavit a používat.

Předpoklady:

  • Systém běžící na databázovém serveru MySQL
  • Uživatelský účet MySQL s oprávněními root

Co je plánovač událostí MySQL?

MySQL Event Scheduler je vlákno, které běží na pozadí a spravuje provádění naplánovaných událostí. Plánovač je ve stavu spánku, pokud globální proměnná event_scheduler je nastaveno na ON nebo 1 .

Plánovač událostí MySQL představuje alternativu úlohy Cron MySQL . Některé výhody Plánovače událostí jsou:

  • Je napsán přímo na serveru MySQL.
  • Je nezávislý na platformě a aplikaci.
  • Lze jej použít, kdykoli je vyžadována pravidelná aktualizace nebo vyčištění databáze.
  • Snižuje počet kompilací dotazů.

Konfigurace plánovače událostí MySQL

Stav plánovače událostí MySQL lze nakonfigurovat tak, aby byl plánovač zapnut , vypnuto nebo zakázat to.

Chcete-li zkontrolovat stav Plánovače událostí, spusťte následující příkaz:

SHOW processlist;

event_scheduler systémová proměnná zobrazená ve výsledku ukazuje stav Plánovače událostí. Zde je event_scheduler stav proměnné je Čekání na prázdnou frontu , což znamená, že Plánovač je zapnutý a čeká na událost, která jej spustí.

Možné stavy jsou:

  • ON :Vlákno Event Scheduler je spuštěno a provádí všechny naplánované události. Toto je výchozí stav plánovače. Pokud je Plánovač ON , SHOW processlist výstup příkazu jej uvádí jako proces démona.

Chcete-li plánovač událostí zapnout ON , spusťte následující příkaz:

SET GLOBAL event_scheduler = ON;

Hodnota ON je zaměnitelné s 1 .

  • OFF :Vlákno Plánovače událostí není spuštěno a nezobrazuje se ve výstupu SHOW processlist . Pokud je Plánovač událostí nastaven na OFF , naplánované události se neprovedou.

Chcete-li Plánovač událostí OFF , spusťte následující příkaz:

SET GLOBAL event_scheduler = OFF;

Hodnota OFF je zaměnitelné s 0 .

  • DISABLED :Tento stav znamená, že plánovač událostí není funkční. Vlákno se nespustí a nezobrazí se ve výstupu SHOW processlist příkaz.

Chcete-li zakázat Plánovač událostí, přidejte při spouštění serveru následující možnost příkazového řádku:

--event-scheduler=DISABLED

Plánování událostí MySQL

Událost je databázový objekt obsahující příkazy SQL spouštěné v určený čas nebo v pravidelných intervalech. Události začínají a končí v konkrétní čas a datum.

Protože se události MySQL spouštějí v čase, který uživatel určí, jsou tyto události také označovány jako časové spouštěče . Neměly by se však zaměňovat se spouštěči MySQL, což jsou databázové objekty spouštěné v reakci na konkrétní události. Proto je lepší používat termín události při odkazování na naplánované úkoly, aby nedošlo k záměně.

Následující části pojednávají o tom, jak vytvořit , zobrazit , změnit nebo odebrat události.

Vytvářejte nové události

Chcete-li vytvořit novou událost, použijte následující syntaxi:

CREATE EVENT [IF NOT EXIST] event_name
ON SCHEDULE schedule
DO
event_body

IF NOT EXIST zajišťuje, že název události je jedinečný pro používanou databázi. Místo event_name zadejte jedinečný název události syntax. Plán pro provedení události je uveden za ON SCHEDULE prohlášení. Událost může být jednorázová nebo opakující se událost .

Místo event_body zadejte příkazy SQL syntaxe za DO klíčové slovo. Tělo události může obsahovat uložené procedury, jednotlivé dotazy nebo složené příkazy. Napište složené příkazy do BEGIN END blokovat.

Naplánovat události

Události lze naplánovat na pozdější spuštění nebo na pravidelné spouštění.

Jednorázová událost

Jednorázová událost se provede pouze jednou a poté se automaticky odstraní.

Chcete-li vytvořit jednorázovou událost, zadejte časové razítko za ON SCHEDULE pomocí následující syntaxe:

AT timestamp + [INTERVAL interval]

Možné volby pro interval jsou:

  • ROK
  • ČTVRTLETÍ
  • MĚSÍC
  • DEN
  • HODINA
  • MINUTE
  • WEEK
  • DRUHÁ
  • YEAR_MONTH
  • DAY_HOUR
  • DAY_MINUTE
  • DAY_SECOND
  • HOUR_MINUTE
  • HOUR_SECOND
  • MINUTE_SECOND

Časové razítko musí být DATETIME nebo TIMESTAMP hodnotu v budoucnu. Chcete-li zadat přesný čas, přidejte k časové značce interval pomocí + INTERVAL , kladné celé číslo a jedna z možností intervalu. Upozorňujeme, že to platí pouze při použití CURRENT_TIMESTAMP funkce.

Například:

Zde se událost stane dva dny od jejího vytvoření a jejím úkolem je shodit tabulku s názvem test .

Události jsou po provedení automaticky zrušeny. Chcete-li uložit událost do databáze, přidejte ON COMPLETION PRESERVE klauzule při vytváření události.

Opakující se událost

Opakující se událost se opakuje opakovaně v určený čas. Chcete-li naplánovat opakující se událost, použijte následující syntaxi za ON SCHEDULE prohlášení:

EVERY interval 
STARTS timestamp [+ INTERVAL] 
ENDS timestamp [+ INTERVAL]

STARTS klíčové slovo určuje, kdy se spustí provádění události, zatímco ENDS klíčové slovo určuje, kdy se provádění události zastaví.

Například:

Tato událost způsobí, že MySQL jednou za šest měsíců zahodí test tabulky, a to okamžitě.

Můžete také zadat interval pro pozdější zahájení události. Například:

Můžete také zadat čas zahájení a čas ukončení události:

Tato událost způsobí, že MySQL zruší tabulku s názvem test jednou za šest měsíců po dobu pěti let, počínaje pěti dny.

Zobrazit události

Následující příkaz zobrazí všechny události uložené v databázi:

SHOW EVENTS FROM database_name;

Pamatujte, že jednorázové události jsou po provedení automaticky zrušeny a nezobrazují se ve výstupu SHOW EVENTS příkaz, pokud nepoužijete příkaz ON COMPLETION PRESERVE klauzule při vytváření události.

Výstup obsahuje seznam všech událostí uložených v zadané databázi.

Změnit události

Použijte ALTER EVENT příkaz ke změně existující události:

ALTER EVENT event_name
[ ON SCHEDULE schedule ]
[ RENAME TO new_event_name ]
[ ON COMPLETION [ NOT ] PRESERVE ]
[ COMMENT 'comment' ]
[ ENABLED | DISABLED ]
[ DO sql_statement ]

event_name musí jít o událost, která již existuje. Všechny příkazy po ALTER EVENT jsou volitelné v závislosti na tom, co chcete změnit. Vynechání všech klauzulí v ALTER EVENT příkaz znamená, že zůstanou ve svém předchozím stavu. Jakákoli zahrnutá klauzule znamená, že se použijí nové hodnoty, které určíte.

Například:

V tomto příkladu jsme přejmenovali událost a změnili její příkaz SQL.

Odebrat události (vypustit událost)

Chcete-li odstranit (upustit) událost, použijte následující syntaxi:.

DROP EVENT [IF EXISTS] event_name;

Například:

Tato akce trvale smaže událost z databáze.

Pomocí IF EXISTS příkaz vydá varování, pokud taková událost neexistuje:

Omezení událostí MySQL

Při používání událostí MySQL je třeba vzít v úvahu určitá omezení. Některé z nich jsou:

  • Události nemohou vrátit sadu výsledků. Výstup je přesměrován na dev/null a událost buď selže, nebo uspěje bez upozornění uživatele.
  • V názvech událostí se nerozlišují velká a malá písmena. Dvě události nemohou mít stejný název s různými velikostmi písmen.
  • Události nelze naplánovat po 19. lednu 2038 – maximum, které lze v epoše Unixu reprezentovat.
  • Události nelze vytvářet, rušit ani měnit jiným uloženým programem, spouštěčem nebo událostí.
  • Události nemohou vytvářet, rušit ani měnit uložené programy nebo spouštěče.
  • Intervaly MONTH , YEAR_MONTH , QUARTER a YEAR jsou vyřešeny v měsících. Všechny ostatní intervaly jsou vyřešeny v sekundách.
  • Můžou existovat dvě události se stejným rozvrhem, ale neexistuje způsob, jak vynutit příkaz k provedení.
  • Událost se vždy spouští s oprávněními definujícího. Vlákno spustí událost jako uživatel, který událost vytvořil, s oprávněními tohoto uživatele. Upozorňujeme, že odebráním uživatele se neodeberou události, které uživatel vytvořil.
  • Události nemění počet provedení příkazu, což znamená, že to nemá žádný vliv na SHOW STATISTICS příkaz.
  • Maximální zpoždění pro provedení události jsou dvě sekundy. Nicméně information_schema.events tabulka vždy zobrazuje přesný čas provedení události.
  • Používejte uživatelem definované proměnné místo odkazů na lokální proměnné v připravených příkazech uvnitř uložené rutiny.
  • Počet rekurzivních volání je omezen na max_sp_recursion_depth . Pokud je tato proměnná 0, což je výchozí hodnota, rekurzivita je zakázána.
  • Použijte START TRANSACTION místo příkazu BEGIN WORK , protože BEGIN WORK je považováno za začátek BEGIN END blokovat.
  • Jakékoli jiné omezení uložených procedur se vztahuje také na události.

Linux
  1. Průvodce spuštěním reverzního proxy pro HTTP(S), SSH a MySQL/MariaDB pomocí NGINX

  2. Jak nastavit LogAnalyzer s Rsyslog a MySQL

  3. Vytvořte novou databázi a použijte ji v MySQL/MariaDB

  1. MySQL – ladění a optimalizace výkonu

  2. Instalace a používání MySQL Workbench na Fedoře 35 / 34 / 33 / 32 - Průvodce krok za krokem

  3. Stav a závislosti služby Solaris?

  1. Bash pro průvodce smyčkou a příklady

  2. Top 8 tipů a triků příkazového řádku MySQL

  3. Plánovač událostí MySQL