Spec-Zone .ru
спецификации, руководства, описания, API
|
Чтобы включить или отключить выполнение запланированных событий, необходимо установить значение глобальной
переменной event_scheduler
системная переменная. Это требует SUPER
полномочие.
EVENT
полномочие управляет
созданием, модификацией, и удалением событий. Это полномочие может дароваться, используя GRANT
. Например, это GRANT
оператор совещается EVENT
полномочие для схемы называют myschema
на пользователе jon@ghidora
:
GRANT EVENT ON myschema.* TO jon@ghidora;
(Мы предполагаем, что эта учетная запись пользователя уже существует, и что мы хотим для нее остаться неизменными иначе.)
Предоставить этому тому же самому пользователю EVENT
полномочие на всех схемах, используйте следующий оператор:
GRANT EVENT ON *.* TO jon@ghidora;
EVENT
у полномочия есть
глобальный или контекст на уровне схемы. Поэтому, попытка предоставить это на единственной таблице приводит к
ошибке как показано:
mysql> GRANT EVENT ON myschema.mytable TO
jon@ghidora;
ERROR 1144 (42000): Illegal GRANT/REVOKE command; pleaseconsult the manual to see which privileges can be used
Важно понять, что событие выполняется с полномочиями его устройства определения, и что это не может выполнить
действия, для которых у его устройства определения нет необходимых полномочий. Например, предположите это jon@ghidora
имеет EVENT
полномочие для myschema
. Предположите
также, что этот пользователь имеет SELECT
полномочие для myschema
, но никакие
другие полномочия для этой схемы. Это возможно для jon@ghidora
создать новое
событие, такое как этот:
CREATE EVENT e_store_ts ON SCHEDULE EVERY 10 SECOND DO INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());
Пользователь ожидает в течение приблизительно одной минуты, и затем выполняет a SELECT *
FROM mytable;
запрос, ожидая видеть несколько новых строк в таблице. Вместо этого таблица пуста. Так как
пользователь не имеет INSERT
полномочие для рассматриваемой таблицы, событие не имеет никакого эффекта.
Если Вы осматриваете журнал ошибок MySQL (
), можно видеть, что событие выполняется, но
действие, которым оно пытается выполнить сбои, как обозначено hostname
.errRetCode=0
:
060209 22:39:44 [Note] EVEX EXECUTING event newdb.e [EXPR:10]060209 22:39:44 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0060209 22:39:54 [Note] EVEX EXECUTING event newdb.e [EXPR:10]060209 22:39:54 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0060209 22:40:04 [Note] EVEX EXECUTING event newdb.e [EXPR:10]060209 22:40:04 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0
Так как у этого пользователя очень вероятно нет доступа к журналу ошибок, возможно проверить, допустим ли оператор действия события, выполняя это непосредственно:
mysql> INSERT INTO myschema.mytable VALUES
(UNIX_TIMESTAMP());
ERROR 1142 (42000): INSERT command denied to user'jon'@'ghidora' for table 'mytable'
Контроль INFORMATION_SCHEMA.EVENTS
таблица показывает это e_store_ts
существует и включается, но LAST_EXECUTED
столбец NULL
:
mysql>SELECT * FROM INFORMATION_SCHEMA.EVENTS
>WHERE EVENT_NAME='e_store_ts'
>AND EVENT_SCHEMA='myschema'\G
*************************** 1. row *************************** EVENT_CATALOG: NULL EVENT_SCHEMA: myschema EVENT_NAME: e_store_ts DEFINER: jon@ghidora EVENT_BODY: SQLEVENT_DEFINITION: INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP()) EVENT_TYPE: RECURRING EXECUTE_AT: NULL INTERVAL_VALUE: 5 INTERVAL_FIELD: SECOND SQL_MODE: NULL STARTS: 0000-00-00 00:00:00 ENDS: 0000-00-00 00:00:00 STATUS: ENABLED ON_COMPLETION: NOT PRESERVE CREATED: 2006-02-09 22:36:06 LAST_ALTERED: 2006-02-09 22:36:06 LAST_EXECUTED: NULL EVENT_COMMENT:1 row in set (0.00 sec)
Отменить EVENT
полномочие,
используйте REVOKE
оператор. В этом примере, EVENT
полномочие на схеме myschema
удаляется из jon@ghidora
учетная запись пользователя:
REVOKE EVENT ON myschema.* FROM jon@ghidora;
Отмена EVENT
полномочие от пользователя не удаляет или отключает события, которые, возможно, были созданы тем
пользователем.
Событие не перемещается или отбрасывается в результате переименования или отбрасывания пользователя, который создал это.
Предположите что пользователь jon@ghidora
был предоставлен EVENT
и INSERT
полномочия на myschema
схема. Этот пользователь тогда создает следующее событие:
CREATE EVENT e_insert ON SCHEDULE EVERY 7 SECOND DO INSERT INTO myschema.mytable;
После того, как это событие было создано, root
отменяет EVENT
полномочие для jon@ghidora
. Однако, e_insert
продолжает выполняться, вставляя новую строку в mytable
каждые семь секунд. То же самое было бы истиной если root
сделал любое из этих
заявлений:
DROP USER jon@ghidora;
RENAME USER jon@ghidora TO someotherguy@ghidora;
Можно проверить, что это - истина, исследуя mysql.event
таблица (обсужденный позже
в этом разделе) или INFORMATION_SCHEMA.EVENTS
таблица (см. Раздел 20.7," INFORMATION_SCHEMA
EVENTS
Таблица") прежде и после издания a DROP USER
или RENAME
USER
оператор.
Определения события сохранены в mysql.event
таблица. Отбрасывать событие,
создаваемое другой учетной записью пользователя, MySQL root
пользователь (или
другой пользователь с необходимыми полномочиями) могут удалить строки из этой таблицы. Например, чтобы удалить
событие e_insert
показанный ранее, root
может
использовать следующий оператор:
DELETE FROM mysql.event WHERE db = 'myschema' AND definer = 'jon@ghidora' AND name = 'e_insert';
Очень важно соответствовать имя события, имя схемы базы данных, и учетную запись пользователя, удаляя строки из
mysql.event
таблица. Это - то, потому что тот же самый пользователь может создать
различные события того же самого имени в различных схемах.
Пользователи EVENT
полномочия
сохранены в Event_priv
столбцы mysql.user
и mysql.db
таблицы. В обоих случаях этот столбец содержит одно из значений'Y
'или'N
'. 'N
'значение
по умолчанию. mysql.user.Event_priv
устанавливается в'Y
'для данного пользователя, только если у того пользователя есть глобальная
переменная EVENT
полномочие (то
есть, если полномочие даровалось, используя GRANT EVENT ON *.*
). Для на уровне
схемы EVENT
полномочие, GRANT
создает строку в mysql.db
и наборы, что
строка Db
столбец к имени схемы, User
столбец к имени
пользователя, и Event_priv
столбец к'Y
'. Никогда не
должно быть никакой потребности управлять этими таблицами непосредственно, начиная с GRANT EVENT
и REVOKE EVENT
операторы выполняют
необходимые операции на них.
Пять переменных состояния обеспечивают количества связанных с событием операций (но не операторов, выполняемых событиями; см. Раздел E.1, "Ограничения на Сохраненные Программы"). Они:
Com_create_event
: Число CREATE EVENT
операторы, выполняемые начиная с последнего перезапуска
сервера.
Com_alter_event
: Число ALTER EVENT
операторы, выполняемые начиная с последнего перезапуска
сервера.
Com_drop_event
: Число DROP EVENT
операторы, выполняемые начиная с последнего перезапуска
сервера.
Com_show_create_event
: Число SHOW CREATE EVENT
операторы, выполняемые начиная с последнего перезапуска
сервера.
Com_show_events
: Число SHOW EVENTS
операторы, выполняемые начиная с последнего перезапуска
сервера.
Можно просмотреть текущую стоимость для всех них когда-то, выполняя оператор SHOW STATUS
LIKE '%event%';
.