27.4.2 Настройка планировщика событий
События выполняются специальной нитью планировщика событий; когда мы говорим о планировщике событий, мы на самом деле имеем в виду эту нить. При запуске нить планировщика событий и ее текущее состояние могут быть видны пользователям, имеющим привилегию PROCESS в выводе SHOW PROCESSLIST, как показано в последующем обсуждении.
Глобальная переменная системы event_scheduler определяет, включен ли планировщик событий и работает ли он на сервере. Она имеет одно из следующих значений, которые влияют на планирование событий, как описано ниже:
-
ON: Планировщик событий запущен; нить планировщика событий работает и выполняет все запланированные события.ONявляется значением по умолчанию дляevent_scheduler.Когда планировщик событий
ON, нить планировщика событий отображается в выводеSHOW PROCESSLISTкак процесс-демон, и ее состояние представлено так:mysql>
SHOW PROCESSLIST\G*************************** 1. row *************************** Id: 1 User: root Host: localhost db: NULL Command: Query Time: 0 State: NULL Info: show processlist *************************** 2. row *************************** Id: 2 User: event_scheduler Host: localhost db: NULL Command: Daemon Time: 3 State: Waiting for next activation Info: NULL 2 rows in set (0.00 sec)Планирование событий можно остановить, установив значение
event_schedulerвOFF. -
OFF: Планировщик событий остановлен. Нить планировщика событий не работает, не отображается в выводеSHOW PROCESSLIST, и никакие запланированные события не выполняются.Когда планировщик событий остановлен (
event_schedulerравноOFF), его можно запустить, установив значениеevent_schedulerвON. (См. следующий пункт.) DISABLED: Это значение делает планировщик событий неработоспособным. Когда планировщик событийDISABLED, нить планировщика событий не работает (и поэтому не отображается в выводеSHOW PROCESSLIST). Кроме того, состояние планировщика событий не может быть изменено во время работы.
Если статус планировщика событий не установлен в DISABLED, event_scheduler может быть переключен между ON и OFF (используя SET). Также можно использовать 0 для OFF, и 1 для ON при установке этой переменной. Таким образом, любое из следующих 4 утверждений может быть использовано в клиенте mysql для включения планировщика событий:
SET GLOBAL event_scheduler = ON;
SET @@GLOBAL.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@GLOBAL.event_scheduler = 1;
Аналогично, любое из этих 4 утверждений может быть использовано для выключения планировщика событий:
SET GLOBAL event_scheduler = OFF;
SET @@GLOBAL.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@GLOBAL.event_scheduler = 0;
Если планировщик событий включен, включение переменной системы super_read_only предотвращает обновление временных меток события “последнее выполнение” в таблице словаря данных events. Это заставляет планировщик событий остановить следующее выполнение запланированного события после записи сообщения в журнал ошибок сервера. (В этой ситуации переменная системы event_scheduler не меняется с ON на OFF. Следствием является то, что эта переменная отвергает намерение DBA, что планировщик событий включен или выключен, где его фактическое состояние, запущен или остановлен, может быть иным.). Если super_read_only отключен после включения, сервер автоматически перезапускает планировщик событий по мере необходимости.
Хотя ON и OFF имеют числовые эквиваленты, значение, отображаемое для event_scheduler операторами SELECT или SHOW
VARIABLES всегда является одним из OFF, ON или DISABLED. DISABLED не имеет числового эквивалента. По этой причине ON и OFF обычно предпочитаются 1 и 0 при настройке этой переменной.
Обратите внимание, что попытка установить event_scheduler без указания его как глобальной переменной приводит к ошибке:
mysql< SET @@event_scheduler = OFF;
ERROR 1229 (HY000): Variable 'event_scheduler' is a GLOBAL
variable and should be set with SET GLOBAL
Установить планировщик событий в DISABLED можно только при запуске сервера. Если event_scheduler равно ON или OFF, вы не можете установить его в DISABLED во время работы. Кроме того, если планировщик событий установлен в DISABLED при запуске, вы не можете изменить значение event_scheduler во время работы.
Чтобы отключить планировщик событий, используйте один из следующих двух методов:
-
В качестве параметра командной строки при запуске сервера:
--event-scheduler=DISABLED
-
В файле конфигурации сервера (
my.cnfилиmy.iniна системах Windows), включите строку, которую может прочитать сервер (например, в секции[mysqld]):event_scheduler=DISABLED
Чтобы включить планировщик событий, перезапустите сервер без параметра командной строки --event-scheduler=DISABLED или после удаления или комментирования строки, содержащей event-scheduler=DISABLED в файле конфигурации сервера, как требуется. В качестве альтернативы, вы можете использовать ON (или 1) или OFF (или 0) вместо значения DISABLED при запуске сервера.
Вы можете выполнять операторы управления событиями, когда event_scheduler установлено в DISABLED. В таких случаях не генерируются предупреждения или ошибки (при условии, что сами операторы корректны). Однако запланированные события не могут выполняться, пока эта переменная не будет установлена в ON (или 1). После этого нить планировщика событий выполнит все события, условия планирования которых выполнены.
Запуск сервера MySQL с параметром --skip-grant-tables приводит к установке event_scheduler в значение DISABLED, переопределяя любое другое значение, установленное в командной строке или в файлах my.cnf или my.ini (Ошибка #26807).
SQL операторы, используемые для создания, изменения и удаления событий, см. в Раздел 27.4.3, «Синтаксис событий».
MySQL предоставляет таблицу EVENTS в базе данных INFORMATION_SCHEMA. Эту таблицу можно запросить, чтобы получить информацию о запланированных событиях, которые были определены на сервере. См. Раздел 27.4.4, «Метаданные событий» и Раздел 28.3.14, «Таблица INFORMATION_SCHEMA EVENTS» для получения дополнительной информации.
Дополнительную информацию о планировании событий и системе привилегий MySQL см. в Раздел 27.4.6, «Планировщик событий и привилегии MySQL».
© 2025 Oracle
Licensed under the GPLv2 License.