SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 08.11.2015 17:29:50

yar113
Участник
Зарегистрирован: 21.12.2014
Сообщений: 13

Планировщик событий - событие только при запуске

Возможно ли реализовать событие, которое будет срабатывать один раз при каждом запуске сервера?

Неактивен

 

#2 08.11.2015 17:59:43

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Планировщик событий - событие только при запуске

Для решения задачи можно использовать параметр конфигурации init-file:
https://dev.mysql.com/doc/refman/5.7/en … _init-file

С помощью планировщика можно реализовать похожее поведение вручную.

Неактивен

 

#3 08.11.2015 18:05:18

yar113
Участник
Зарегистрирован: 21.12.2014
Сообщений: 13

Re: Планировщик событий - событие только при запуске

Вот есть такое событие:

CREATE DEFINER=`user`@`%` EVENT `delete_event` ON SCHEDULE EVERY 1 HOUR STARTS '2009-07-19 00:00:00' ON COMPLETION PRESERVE ENABLE COMMENT 'удаление данных' DO BEGIN
 DELETE FROM `test_table`;
END

Как его переписать чтобы оно выполнялось только при запуске? Я так понимаю оно и так выполняется при запуске, достаточно 1 HOUR заменить на 99999 YEAR?
Или надо просто ON SCHEDULE AT CURRENT_TIMESTAMP?

Неактивен

 

#4 08.11.2015 18:33:09

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Планировщик событий - событие только при запуске

Ваше событие выполняется раз в час. Запуск сервера и планировщик не связаны между собой. Если не хотите повторного исполнения, можете внутри SQL проверять выполнялось ли оно уже с момента запуска сервера (для этого нужно в отдельной таблице хранить время каждого фактического исполнения события).

Неактивен

 

#5 08.11.2015 18:53:18

yar113
Участник
Зарегистрирован: 21.12.2014
Сообщений: 13

Re: Планировщик событий - событие только при запуске

Вот я сделал такую таблицу в памяти:

CREATE TABLE `db_status` (
  `flag` tinyint(3) unsigned NOT NULL,
  PRIMARY KEY (`flag`)
) ENGINE=MEMORY;

При старте сервера она будет пуста.
Запрос для установки флага:
INSERT INTO `hl_db_status` SET `flag` = 1;

Соответственно если он не проходит с ошибкой "1062 - Duplicate entry", значит флаг установлен и остальные запросы в блоке DO BEGIN ... END выполнены не будут?
Или это надо обрабатывать как-то явно?

Неактивен

 

#6 08.11.2015 19:18:00

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Планировщик событий - событие только при запуске

Все верно, должно работать

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson