MySQL Event Scheduler

MySQLBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a usar o MySQL Event Scheduler para automatizar tarefas de banco de dados. O Event Scheduler é um recurso no MySQL que executa instruções SQL em horários ou intervalos programados. Isso é útil para automatizar tarefas rotineiras como manutenção de banco de dados, limpeza de dados ou relatórios periódicos.

Você será guiado através da habilitação do Event Scheduler, criação de um banco de dados e tabela, agendamento de um evento recorrente para modificar dados, verificação da execução do evento e, finalmente, remoção do evento. Ao final deste laboratório, você entenderá os fundamentos do uso do MySQL Event Scheduler.

Ativar o Event Scheduler

O MySQL Event Scheduler é executado como uma thread em segundo plano que executa eventos agendados. Por padrão, este recurso está desabilitado. Seu primeiro passo é habilitá-lo.

Primeiro, abra o terminal a partir do seu desktop.

Conecte-se ao servidor MySQL como o usuário root. Neste ambiente de laboratório, você pode usar sudo para se conectar sem senha.

sudo mysql -u root

Uma vez conectado, você verá o prompt do MySQL (mysql>).

Verifique o status atual do Event Scheduler com o seguinte comando:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

A saída mostrará que o event_scheduler está OFF por padrão.

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

Para habilitar o Event Scheduler, execute o seguinte comando. Esta configuração é global e persistirá enquanto o servidor estiver em execução.

SET GLOBAL event_scheduler = ON;

Verifique se a alteração foi bem-sucedida verificando o status novamente:

SHOW GLOBAL VARIABLES LIKE 'event_scheduler';

A saída agora deve mostrar o valor como ON, confirmando que o Event Scheduler está ativo.

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

Agora que o Event Scheduler está habilitado, você pode prosseguir para a próxima etapa.

Criar um Banco de Dados e Tabela

Antes de criar um evento agendado, você precisa de um banco de dados e uma tabela para o evento interagir. Neste passo, você criará um banco de dados chamado test_db e uma tabela chamada event_logs.

Ainda no shell do MySQL, crie o banco de dados test_db. A cláusula IF NOT EXISTS evita um erro caso o banco de dados já exista.

CREATE DATABASE IF NOT EXISTS test_db;

Mude para o banco de dados recém-criado para torná-lo o banco de dados atual para comandos subsequentes.

USE test_db;

Você verá uma mensagem de confirmação: Database changed.

Em seguida, crie a tabela event_logs. Esta tabela terá um id auto-incrementável e uma coluna counter que nosso evento atualizará.

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

Finalmente, insira uma linha inicial na tabela event_logs com um valor inicial de 0. Isso fornece ao nosso evento um registro para atualizar.

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

Você pode verificar se a tabela foi criada e os dados foram inseridos corretamente executando os seguintes comandos:

SHOW TABLES;
SELECT * FROM event_logs;

A saída deve mostrar a tabela event_logs e uma única linha com id = 1 e 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)

Com o banco de dados e a tabela prontos, você agora pode criar o evento agendado.

Criar um Evento Recorrente

Agora você criará um evento que é executado periodicamente. Este evento incrementará o valor de counter na tabela event_logs a cada 10 segundos.

Certifique-se de que você ainda está usando o banco de dados test_db.

USE test_db;

Crie um evento chamado update_counter_event.

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

Vamos detalhar esta instrução:

  • CREATE EVENT update_counter_event: Define um novo evento com o nome update_counter_event.
  • ON SCHEDULE EVERY 10 SECOND: Especifica que o evento será executado a cada 10 segundos.
  • DO UPDATE ...: Esta é a instrução SQL que o evento executará. Ela incrementa o counter para a linha onde id é 1.

Para verificar se o evento foi criado com sucesso, use o comando SHOW EVENTS.

SHOW EVENTS;

A saída listará seu novo evento e seus detalhes. Verifique se o seu 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)

Nota: O Definer e o tempo de Starts variarão.

O evento está agora ativo e agendado para ser executado. Na próxima etapa, você verificará se ele está atualizando os dados conforme o esperado.

Verificar Execução do Evento

Agora que o evento está agendado, você precisa confirmar que ele está sendo executado corretamente. Como o evento é executado a cada 10 segundos, você deverá ver o valor de counter aumentar ao longo do tempo.

Consulte a tabela event_logs para ver o valor atual.

SELECT * FROM event_logs WHERE id = 1;

Agora, o counter pode ser 2 ou um número pequeno.

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

Aguarde cerca de 15-20 segundos para permitir que o evento seja executado pelo menos uma vez. Em seguida, execute a consulta SELECT novamente.

SELECT * FROM event_logs WHERE id = 1;

Você deverá ver que o valor de counter aumentou.

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

Se você esperar mais tempo e executar a consulta novamente, o valor continuará a aumentar, confirmando que o update_counter_event está sendo executado com sucesso em seu agendamento. Isso demonstra o poder de tarefas automatizadas e baseadas em tempo no MySQL.

Remover o Evento

Quando um evento agendado não é mais necessário, é uma boa prática removê-lo para evitar o consumo desnecessário de recursos. Nesta etapa final, você removerá o update_counter_event.

Para remover o evento, use a instrução DROP EVENT. A cláusula IF EXISTS é recomendada para evitar um erro caso o evento já tenha sido removido.

DROP EVENT IF EXISTS update_counter_event;

Para verificar se o evento foi removido, execute o comando SHOW EVENTS novamente.

SHOW EVENTS;

A saída agora deve ser um conjunto vazio, confirmando que não há mais eventos agendados no banco de dados test_db.

Empty set (0.00 sec)

O update_counter_event não será mais executado. Você pode confirmar isso esperando e consultando a tabela event_logs novamente; o valor de counter não aumentará mais.

Você gerenciou com sucesso o ciclo de vida de um evento do MySQL. Agora você pode sair do shell do MySQL.

exit;

Resumo

Neste laboratório, você aprendeu os fundamentos do uso do MySQL Event Scheduler para automação de tarefas. Você ativou com sucesso o scheduler, configurou um banco de dados e uma tabela, e criou um evento recorrente para atualizar dados automaticamente. Você também praticou a verificação do status e da execução de um evento, e aprendeu como removê-lo quando não era mais necessário.

Essas habilidades são valiosas para automatizar uma ampla gama de tarefas de administração e manutenção de banco de dados, ajudando a garantir a integridade dos dados e a reduzir a carga de trabalho manual.