MySQL: руководство профессионала
Шрифт:
Info: NULL
2 rows in set (0.00 sec)
DISABLED: значение делает планировщик событий неактивным. Когда планировщик событий заблокирован, его поток не выполняется (и не появляется в выводе SHOW PROCESSLIST).
Когда сервер запущен, 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;
Точно
SET GLOBAL event_scheduler = OFF;
SET @@global.event_scheduler = OFF;
SET GLOBAL event_scheduler = 0;
SET @@global.event_scheduler = 0;
Хотя 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
Важно: нельзя включать или выключать планировщик, если сервер работает. То есть, Вы можете изменять значение event_scheduler на DISABLED или с DISABLED на одно из других разрешенных значений для этой опции только, когда сервер остановлен. Попытка это сделать, когда он выполняется, вызовет сбой с ошибкой.
Чтобы отключить планировщик событий, используйте один из следующих двух методов:
Как опция командной строки при старте сервера:--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 5.1.11 event_scheduler вела себя следующим образом: эта переменная могла брать одно из значений 0 (или OFF), 1 (или ON) или 2. Установка в 0 отключала планировщик. Установка в 1 запускала планировщик и выполняла планируемые события. В этом состоянии поток планировщика события, казалось, бездействовала когда просматривалась с SHOW PROCESSLIST. Когда event_scheduler была установлена в 2 (что и было значением по умолчанию), планировщик событий был приостановлен: поток планировщика событий выполнялся и мог быть найден в выводе SHOW PROCESSLIST (где в столбце State отображалось Suspended), но не выполнялись никакие планируемые события. Значение event_scheduler могло быть изменено только между 1 (или ON) и 2 во время работы сервера. Установка в OFF или изменение из OFF) требовала рестарта сервера.
До MySQL 5.1.11 event_scheduler мог брать только одно из 2 значений: 0|OFF (по умолчанию) или 1|ON без перезапуска сервера.
MySQL 5.1.6 и позже обеспечивает таблицу EVENTS в базе данных INFORMATION_SCHEMA. Эта таблица может делать запрос к информации относительно планируемых событий, которые были определены на сервере.
8.2. Синтаксис планировщика событий
MySQL 5.1.6 и позже обеспечивает несколько инструкций SQL для работы с планируемыми событиями:
Новые события определены, используя инструкцию CREATE EVENT.
Определение существующего события может быть изменено посредством инструкции ALTER EVENT.
Когда планируемое событие больше не требуется, оно может быть удалено с сервера использованием инструкции DROP EVENT. Сохраняется ли событие после конца плана, также зависит от предложения ON COMPLETION, если оно имеется.
Событие может быть удалено любым пользователем, имеющим привилегию EVENT для базы данных, в которой событие определено. До MySQL 5.12 пользователь, который не создавал это событие, требовал привилегий на таблице mysql.event.
8.2.1. Синтаксис CREATE EVENT
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval]
| EVERY interval [STARTS timestamp]
[ENDS timestamp]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR |
MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR |
DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND |
MINUTE_SECOND}
Эта инструкция создает и планирует новое событие. Минимальные требования для допустимой инструкции CREATE EVENT следующие:
Ключевые слова CREATE EVENT плюс имя события, которое уникально идентифицирует событие в текущей схеме.
До MySQL 5.1.12 имя события должно было быть уникальным только среди событий, созданных тем же самым пользователем в этой базе данных.
Предложение ON SCHEDULE, которое определяет, когда и как часто событие выполняется.
Предложение DO, которое содержит инструкцию SQL, которая будет выполнена событием.
Это пример минимальной инструкцииCREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO UPDATE myschema.mytable SET mycol = mycol + 1;
Предыдущая инструкция создает событие myevent. Это событие выполняется один раз в час после создания, выполняя инструкцию SQL, которая увеличивает значение столбца mycol таблицы myschema.mytable на 1.