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

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

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql(("MySQL")) -.-> mysql/SystemManagementToolsGroup(["System Management Tools"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/use_database("Database Selection") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_database("Database Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/drop_table("Table Removal") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/insert("Data Insertion") mysql/BasicKeywordsandStatementsGroup -.-> mysql/update("Data Update") mysql/SystemManagementToolsGroup -.-> mysql/show_status("Status Overview") mysql/SystemManagementToolsGroup -.-> mysql/show_variables("Configuration Overview") subgraph Lab Skills mysql/use_database -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/create_database -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/create_table -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/drop_table -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/select -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/insert -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/update -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/show_status -.-> lab-550906{{"Планировщик событий MySQL"}} mysql/show_variables -.-> lab-550906{{"Планировщик событий MySQL"}} end

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

На этом шаге мы включим планировщик событий в MySQL. Планировщик событий (Event Scheduler) представляет собой фоновый поток, который выполняет запланированные события. По умолчанию он отключен. Мы должны включить его, чтобы создавать и запускать события.

Сначала подключимся к серверу MySQL с помощью клиента mysql. Откройте терминал и выполните следующую команду:

mysql -u root -p

Вам будет предложено ввести пароль для пользователя root. Введите пароль, который вы установили при установке MySQL. Если вы не установили пароль, просто нажмите Enter.

Теперь, когда вы подключены к серверу MySQL, вы можете проверить текущий статус планировщика событий. Выполните следующий SQL-запрос:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

Вы должны увидеть вывод, похожий на следующий:

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

Это подтверждает, что планировщик событий в настоящее время отключен.

Чтобы включить планировщик событий, выполните следующий SQL-запрос:

SET GLOBAL event_scheduler = ON;

Эта команда включает планировщик событий глобально.

Теперь убедимся, что планировщик событий включен. Выполните тот же запрос SHOW GLOBAL VARIABLES еще раз:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

Теперь вы должны увидеть вывод, похожий на следующий:

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

Это подтверждает, что планировщик событий теперь включен.

Наконец, выйдите из клиента MySQL, набрав exit и нажав Enter.

exit

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

Создание события для периодического обновления данных

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

Сначала подключимся к серверу MySQL с помощью клиента mysql. Откройте терминал и выполните следующую команду:

mysql -u root -p

Введите пароль для пользователя root, когда это будет предложено.

Теперь создадим базу данных с именем test_db:

CREATE DATABASE IF NOT EXISTS test_db;

Далее перейдем в базу данных test_db:

USE test_db;

Теперь создадим таблицу с именем event_table с двумя столбцами: id (INT, первичный ключ, автоинкрементируемое значение) и value (INT):

CREATE TABLE IF NOT EXISTS event_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    value INT
);

Вставим начальное значение в таблицу:

INSERT INTO event_table (value) VALUES (0);

Теперь создадим событие. Событие будет обновлять столбец value в таблице event_table каждую минуту. Выполните следующий SQL-запрос:

CREATE EVENT IF NOT EXISTS update_event
ON SCHEDULE EVERY 1 MINUTE
DO
  UPDATE event_table SET value = value + 1;

Этот запрос создает событие с именем update_event. Клаусел ON SCHEDULE EVERY 1 MINUTE указывает, что событие должно запускаться каждую минуту. Клаусел DO указывает SQL-запрос, который должен быть выполнен при запуске события, а именно, увеличивает значение в столбце value на 1.

Чтобы проверить, было ли создано событие, выполните следующий SQL-запрос:

SHOW EVENTS FROM test_db;

Вы должны увидеть вывод, похожий на следующий:

+----------+---------------+-------------+-----------+----------+---------------------+---------------------+-----------+------------+-------------------+----------------------+--------------------+--------------------+
| Db       | Name          | Definer     | Time zone | Type     | Execute at          | Interval_value      | Interval_field | Starts              | Ends               | Status             | Originator          | character_set_client | collation_connection | db_collation         |
+----------+---------------+-------------+-----------+----------+---------------------+---------------------+-----------+------------+-------------------+----------------------+--------------------+--------------------+
| test_db  | update_event  | root@%      | SYSTEM    | RECURRING | NULL                | 1                   | MINUTE       | 2024-10-27 14:30:00 | NULL              | ENABLED            | 1                    | utf8mb4              | utf8mb4_0900_ai_ci   | utf8mb4_0900_ai_ci   |
+----------+---------------+-------------+-----------+----------+---------------------+---------------------+-----------+------------+-------------------+----------------------+--------------------+--------------------+
1 row in set (0.00 sec)

Это подтверждает, что событие было создано и включено.

Теперь выйдите из клиента MySQL:

exit

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

Проверка статуса выполнения события

На этом шаге мы проверим статус выполнения события, которое мы создали на предыдущем шаге. Мы подключимся к серверу MySQL и выполним запрос к таблице event_table, чтобы узнать, было ли обновлено значение в столбце value. Поскольку событие запускается каждую минуту, мы должны увидеть, как значение увеличивается с течением времени.

Сначала подключимся к серверу MySQL с помощью клиента mysql:

mysql -u root -p

Введите пароль для пользователя root, когда это будет предложено.

Затем перейдем в базу данных test_db:

USE test_db;

Теперь выполним запрос к таблице event_table, чтобы узнать текущее значение в столбце value:

SELECT * FROM event_table;

Вы должны увидеть вывод, похожий на следующий:

+----+-------+
| id | value |
+----+-------+
|  1 |     N |
+----+-------+
1 row in set (0.00 sec)

Где N - это целочисленное значение. Поскольку событие запускается каждую минуту, значение N должно быть больше начального значения 0, которое мы вставили на предыдущем шаге. Если вы только что создали событие, подождите одну или две минуты и выполните запрос еще раз. Вы должны увидеть, как значение увеличивается.

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

Вы можете выполнить запрос SELECT несколько раз, ожидая по минуте между каждым выполнением, чтобы наблюдать увеличение значения в столбце value. Это подтверждает, что событие работает как ожидается.

Наконец, выйдите из клиента MySQL:

exit

Вы успешно проверили статус выполнения события. На следующем шаге мы удалим событие.

Удаление события

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

Сначала подключимся к серверу MySQL с помощью клиента mysql:

mysql -u root -p

Введите пароль для пользователя root, когда это будет предложено.

Затем перейдем в базу данных test_db:

USE test_db;

Теперь удалим событие с именем update_event. Выполните следующий SQL-запрос:

DROP EVENT IF EXISTS update_event;

Этот запрос удаляет событие, если оно существует. Клаусел IF EXISTS предотвращает возникновение ошибки, если событие не существует.

Чтобы убедиться, что событие было удалено, выполните следующий SQL-запрос:

SHOW EVENTS FROM test_db;

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

Empty set (0.00 sec)

В противном случае, если вы видите update_event в списке, это означает, что событие не было успешно удалено. Проверьте синтаксис вашего SQL-запроса и попробуйте снова.

Наконец, выйдите из клиента MySQL:

exit

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

Резюме

В этом практическом занятии первоначальный этап сосредоточен на включении планировщика событий MySQL (Event Scheduler), фонового потока, ответственного за выполнение запланированных событий. Это включает подключение к серверу MySQL с помощью клиента mysql, проверку текущего статуса планировщика событий (изначально он отключен) и его включение с использованием команды SET GLOBAL event_scheduler = ON;. Успешная активация подтверждается повторной проверкой глобальной переменной event_scheduler.

Следующий этап посвящен созданию события MySQL, предназначенного для периодического обновления таблицы. Это включает определение расписания события и SQL-инструкций, которые оно будет выполнять.