Планировщик событий MySQL

MySQLBeginner
Практиковаться сейчас

Введение

В этой лабораторной работе вы научитесь использовать MySQL Event Scheduler для автоматизации задач базы данных. Event Scheduler — это функция MySQL, которая выполняет SQL-инструкции в запланированное время или с заданными интервалами. Это полезно для автоматизации рутинных задач, таких как обслуживание базы данных, очистка данных или периодическая отчетность.

Вам будет предложено включить Event Scheduler, создать базу данных и таблицу, запланировать повторяющееся событие для изменения данных, проверить выполнение события и, наконец, удалить событие. К концу этой лабораторной работы вы будете понимать основы использования MySQL Event Scheduler.

Включить планировщик событий

MySQL Event Scheduler работает как фоновый поток, который выполняет запланированные события. По умолчанию эта функция отключена. Ваш первый шаг — включить ее.

Сначала откройте терминал на вашем рабочем столе.

Подключитесь к серверу MySQL от имени пользователя root. В этой лабораторной среде вы можете использовать sudo для подключения без пароля.

sudo mysql -u root

После подключения вы увидите приглашение MySQL (mysql>).

Проверьте текущий статус Event Scheduler с помощью следующей команды:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

Вывод покажет, что event_scheduler по умолчанию установлен в OFF.

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | OFF   |
+------------------+-------+
1 row in set (0.00 sec)

Чтобы включить Event Scheduler, выполните следующую команду. Эта настройка является глобальной и будет действовать до тех пор, пока сервер запущен.

SET GLOBAL event_scheduler = ON;

Проверьте, было ли изменение успешным, снова проверив статус:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

Вывод теперь должен показать значение ON, подтверждая, что Event Scheduler активен.

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| event_scheduler  | ON    |
+------------------+-------+
1 row in set (0.00 sec)

Теперь, когда Event Scheduler включен, вы можете перейти к следующему шагу.

Создать базу данных и таблицу

Перед созданием запланированного события вам нужна база данных и таблица, с которыми событие будет взаимодействовать. На этом шаге вы создадите базу данных с именем test_db и таблицу с именем event_logs.

Находясь в оболочке MySQL, создайте базу данных test_db. Предложение IF NOT EXISTS предотвращает ошибку, если база данных уже существует.

CREATE DATABASE IF NOT EXISTS test_db;

Переключитесь на только что созданную базу данных, чтобы сделать ее текущей для последующих команд.

USE test_db;

Вы увидите подтверждающее сообщение: Database changed.

Далее создайте таблицу event_logs. Эта таблица будет иметь автоинкрементный id и столбец counter, который будет обновлять наше событие.

CREATE TABLE event_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    counter INT NOT NULL
);

Наконец, вставьте начальную строку в таблицу event_logs со стартовым значением 0. Это даст нашему событию запись для обновления.

INSERT INTO event_logs (id, counter) VALUES (1, 0);

Вы можете проверить, что таблица была создана и данные были вставлены правильно, выполнив следующие команды:

SHOW TABLES;
SELECT * FROM event_logs;

Вывод должен показать таблицу event_logs и одну строку с id = 1 и counter = 0.

+-----------------+
| Tables_in_test_db |
+-----------------+
| event_logs      |
+-----------------+
1 row in set (0.00 sec)

+----+---------+
| id | counter |
+----+---------+
|  1 |       0 |
+----+---------+
1 row in set (0.00 sec)

Теперь, когда база данных и таблица готовы, вы можете приступить к созданию запланированного события.

Создать повторяющееся событие

Теперь вы создадите событие, которое будет выполняться периодически. Это событие будет увеличивать значение counter в таблице event_logs каждые 10 секунд.

Убедитесь, что вы по-прежнему используете базу данных test_db.

USE test_db;

Создайте событие с именем update_counter_event.

CREATE EVENT update_counter_event
ON SCHEDULE EVERY 10 SECOND
DO
  UPDATE event_logs SET counter = counter + 1 WHERE id = 1;

Разберем это выражение:

  • CREATE EVENT update_counter_event: Определяет новое событие с именем update_counter_event.
  • ON SCHEDULE EVERY 10 SECOND: Указывает, что событие будет выполняться каждые 10 секунд.
  • DO UPDATE ...: Это SQL-выражение, которое будет выполнять событие. Оно увеличивает counter для строки, где id равен 1.

Чтобы проверить, было ли событие успешно создано, используйте команду SHOW EVENTS.

SHOW EVENTS;

Вывод перечислит ваше новое событие и его детали. Проверьте, что его Status установлен в ENABLED.

+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| Db      | Name                 | Definer       | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| test_db | update_counter_event | root@localhost| SYSTEM    | RECURRING | NULL       | 10             | SECOND         | 2024-05-27 12:00:00 | NULL | ENABLED |          1 | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci |
+---------+----------------------+---------------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
1 row in set (0.00 sec)

Примечание: Значения Definer и Starts могут отличаться.

Событие теперь активно и запланировано к выполнению. На следующем шаге вы проверите, обновляет ли оно данные должным образом.

Проверить выполнение события

Теперь, когда событие запланировано, вам нужно убедиться, что оно выполняется правильно. Поскольку событие запускается каждые 10 секунд, вы должны видеть, как значение counter увеличивается со временем.

Выполните запрос к таблице event_logs, чтобы увидеть текущее значение.

SELECT * FROM event_logs WHERE id = 1;

Сейчас counter может быть равен 2 или небольшому числу.

+----+---------+
| id | counter |
+----+---------+
|  1 |       2 |
+----+---------+
1 row in set (0.00 sec)

Подождите примерно 15-20 секунд, чтобы событие выполнилось хотя бы один раз. Затем снова выполните запрос SELECT.

SELECT * FROM event_logs WHERE id = 1;

Вы должны увидеть, что значение counter увеличилось.

+----+---------+
| id | counter |
+----+---------+
|  1 |       3 |
+----+---------+
1 row in set (0.00 sec)

Если вы подождете дольше и снова выполните запрос, значение продолжит увеличиваться, подтверждая, что update_counter_event успешно выполняется по расписанию. Это демонстрирует мощь автоматизированных, основанных на времени задач в MySQL.

Удалить событие

Когда запланированное событие больше не требуется, хорошей практикой является его удаление, чтобы предотвратить ненужное потребление ресурсов. На этом заключительном этапе вы удалите update_counter_event.

Для удаления события используйте оператор DROP EVENT. Рекомендуется использовать предложение IF EXISTS, чтобы избежать ошибки, если событие уже было удалено.

DROP EVENT IF EXISTS update_counter_event;

Чтобы проверить, было ли событие удалено, снова выполните команду SHOW EVENTS.

SHOW EVENTS;

Вывод теперь должен представлять собой пустой набор, подтверждая, что в базе данных test_db больше нет запланированных событий.

Empty set (0.00 sec)

update_counter_event больше не будет выполняться. Вы можете подтвердить это, подождав и снова выполнив запрос к таблице event_logs; значение counter больше не будет увеличиваться.

Вы успешно управляли жизненным циклом события MySQL. Теперь вы можете выйти из оболочки MySQL.

exit;

Резюме

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

Эти навыки ценны для автоматизации широкого спектра задач администрирования и обслуживания баз данных, помогая обеспечить целостность данных и снизить объем ручной работы.