创建定时事件

本配置将创建两个定时事件,一个将"api"替换为"brr",另一个将"brr"替换为"api",实现关键字的定时轮换。

1、 编辑MySQL配置文件,启用事件调度器:

  • 文件名:my.cnf
  • 路径:/yes/1panel/apps/mariadb/mariadb/conf/my.cnf

在配置文件 my.cnf 中添加以下内容:

socket = /run/mysqld/mysqld.sock
event_scheduler=ON

2、 修改配置文件后,需要重启数据库服务使配置生效:

systemctl restart mysql

systemctl restart mariadb

在MySQL中执行以下SQL脚本,创建两个定时事件:

USE bbsxpvip;

DELIMITER $$

DROP EVENT IF EXISTS evt_api_to_bbr$$
CREATE EVENT evt_api_to_bbr
ON SCHEDULE
  EVERY 1 DAY
  STARTS TIMESTAMP('2025-11-12 13:00:00')
ON COMPLETION PRESERVE
ENABLE
DO
BEGIN
  UPDATE bbs_post SET message = REPLACE(message,'api','brr') WHERE message LIKE '%api%';
  UPDATE bbs_post SET message_fmt = REPLACE(message_fmt,'api','brr') WHERE message_fmt LIKE '%api%';
END$$

DROP EVENT IF EXISTS evt_bbr_to_api$$
CREATE EVENT evt_bbr_to_api
ON SCHEDULE
  EVERY 1 DAY
  STARTS TIMESTAMP('2025-11-11 08:30:00')
ON COMPLETION PRESERVE
ENABLE
DO
BEGIN
  UPDATE bbs_post SET message = REPLACE(message,'brr','api') WHERE message LIKE '%brr%';
  UPDATE bbs_post SET message_fmt = REPLACE(message_fmt,'brr','api') WHERE message_fmt LIKE '%brr%';
END$$

DELIMITER ;

-- 检查事件是否创建成功
SHOW EVENTS;

这个脚本创建了两个事件:

  • evt_api_to_bbr:每天13:00将"api"替换为"brr"
  • evt_bbr_to_api:每天08:30将"brr"替换为"api"

主要:把脚本bbsxpvip 替换你的数据库名


执行以下SQL语句检查事件调度器是否已启用:

SHOW VARIABLES LIKE 'event_scheduler';

预期结果:

Variable_nameValue
event_schedulerON

检查事件状态,执行以下SQL语句检查事件是否已创建:

SHOW EVENTS;

应该能看到两个事件:evt_api_to_bbrevt_bbr_to_api


事件参数说明:

参数说明
ON SCHEDULE EVERY 1 DAY每天执行一次
STARTS TIMESTAMP('...')`事件开始执行的时间
ON COMPLETION PRESERVE`事件完成后保留事件定义
ENABLE启用事件

替换逻辑说明:

事件执行时间操作
evt_api_to_bbr每天13:00将"api"替换为"brr"
evt_bbr_to_api每天08:30将"brr"替换为"api"

常见问题

1、事件调度器未启用

如果SHOW VARIABLES LIKE 'event_scheduler'显示为OFF:

  • 检查配置文件是否正确添加了event_scheduler=ON
  • 确认已重启数据库服务
  • 尝试在MySQL中直接启用:SET GLOBAL event_scheduler = ON;

2、如果事件创建成功但未执行:

  • 检查事件状态:SHOW EVENTS;
  • 确认事件是否启用:状态应为ENABLED
  • 检查MySQL错误日志

3、权限问题,创建事件需要EVENT权限:

GRANT EVENT ON database_name.* TO 'username'@'host';

发表评论