Ova

How to Enable Event Scheduler in MySQL

Published in MySQL Event Scheduler 5 mins read

Enabling the MySQL Event Scheduler allows your database to execute scheduled tasks automatically, much like a cron job but managed directly within MySQL. This feature is crucial for automating routine maintenance, data cleanup, or report generation.

You can enable the Event Scheduler in MySQL either temporarily at runtime or persistently through configuration, ensuring it remains active across server restarts.

Understanding Event Scheduler Status

Before enabling, it's helpful to check the current status of the Event Scheduler. You can do this by querying the event_scheduler system variable:

SHOW VARIABLES LIKE 'event_scheduler';

Or, using a more concise syntax:

SELECT @@event_scheduler;

The output will show one of three states:

  • ON: The Event Scheduler is active and running.
  • OFF: The Event Scheduler is inactive but can be turned ON at runtime without a server restart.
  • DISABLED: The Event Scheduler is explicitly disabled and cannot be activated at runtime. This state requires a server restart after making changes to the configuration file or startup options.

Methods to Enable the Event Scheduler

There are primary ways to enable the MySQL Event Scheduler, depending on whether you need a temporary or persistent solution.

1. Enable at Runtime (Temporary)

This method activates the Event Scheduler immediately without requiring a server restart. However, the change is not persistent; the scheduler will revert to its previous state (OFF or DISABLED) if the MySQL server is restarted.

To enable it at runtime, use the SET GLOBAL command:

SET GLOBAL event_scheduler = ON;

Example:

mysql> SHOW VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL event_scheduler = ON;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+
1 row in set (0.00 sec)

This method is suitable for testing or temporary tasks. For production environments, a persistent solution is generally recommended.

2. Enable Through Configuration File (Persistent)

For a persistent solution, you need to modify your MySQL server's configuration file. This change will ensure the Event Scheduler is ON every time the server starts.

  1. Locate the Configuration File:

    • On Linux/Unix-like systems, this is typically my.cnf. Common locations include /etc/my.cnf, /etc/mysql/my.cnf, /usr/local/mysql/my.cnf, or ~/.my.cnf.
    • On Windows, it's usually my.ini located in the MySQL installation directory (e.g., C:\ProgramData\MySQL\MySQL Server 8.0\my.ini or C:\Program Files\MySQL\MySQL Server 8.0\my.ini).
  2. Edit the File:

    • Open the configuration file using a text editor with administrative privileges.
    • Locate the [mysqld] section.
    • Add or modify the event_scheduler variable to ON.
    • Important: If there's a line like event_scheduler=DISABLED, you must remove it or comment it out (by adding # at the beginning of the line) before adding event_scheduler=ON.

    Example my.cnf entry:

    [mysqld]
    event_scheduler = ON
  3. Restart MySQL Server:

    • After saving the changes to the configuration file, a server restart is required for the setting to take effect.
    • On Linux, you might use: sudo systemctl restart mysql or sudo service mysql restart.
    • On Windows, restart the MySQL service via the Services manager.

3. Enable Via Command-Line Option (Persistent)

You can also specify the event_scheduler setting when starting the MySQL server using a command-line option. This method is also persistent for the duration of that specific server run.

When starting the MySQL server (e.g., mysqld), include the --event-scheduler=ON option:

mysqld --event-scheduler=ON

Important: If your server was previously started with --event-scheduler=DISABLED, you will need to restart the server without that specific command-line option (or with --event-scheduler=ON) to allow the scheduler to be enabled.

This method is less commonly used for permanent setup in production but is useful for testing or specific deployment scenarios where command-line arguments are preferred over configuration files.

Summary of Enabling Methods

Method Persistence Requires Restart? Configuration
SET GLOBAL event_scheduler = ON; No (temporary) No Execute SQL command on a running server.
Configuration File (my.cnf/my.ini) Yes (persistent) Yes Add event_scheduler = ON under [mysqld]. Remove or comment out event_scheduler=DISABLED if present.
Command-Line Startup Yes (for current run) Yes (if previously DISABLED) Start mysqld with --event-scheduler=ON. If previously started with --event-scheduler=DISABLED, restart without that option or with --event-scheduler=ON.

Best Practices and Considerations

  • Permissions: You need the SUPER privilege to change the GLOBAL event_scheduler variable at runtime or to restart the MySQL server.

  • Security: While powerful, scheduled events should be carefully designed and secured to prevent unintended operations or performance issues.

  • Monitoring: Regularly check the Event Scheduler's status and the execution logs of your events to ensure they are running as expected.

  • Event Creation: Once enabled, you can create events using the CREATE EVENT statement.

    CREATE EVENT my_daily_cleanup
    ON SCHEDULE EVERY 1 DAY
    STARTS '2023-01-01 03:00:00'
    DO
      BEGIN
        -- SQL statements to execute, e.g.,
        DELETE FROM old_logs WHERE log_date < CURDATE() - INTERVAL 30 DAY;
      END;

By following these steps, you can successfully enable the Event Scheduler in your MySQL environment and leverage its capabilities for automated database tasks.