mysql数据库定时执行sql语句
|
zhenglin
2025年11月1日 16:3
本文热度 280
|
背景;性能测试稳定性测试场景,需要定时对数据库缓存表进行清理,否则造成表空间不足和磁盘空间不足导致交易异常停止,影响测试;目的:定时执行RUNCATE语句,清空表内容;
方法:通过MySQL 的事件调度器(Event Scheduler)来实现
操作步骤:
1. 确保事件调度器开启
首先检查并开启 MySQL 的事件调度器(默认可能关闭):
-- 查看事件调度器状态(ON表示开启,OFF表示关闭)
SHOW VARIABLES LIKE 'event_scheduler';
-- 如果未开启,执行以下语句开启(需要管理员权限)
SET GLOBAL event_scheduler = ON;
执行以下 SQL 创建一个每 1 小时执行一次的事件,用于清空指定表数据:
-- 创建事件(如果已存在则先删除)
DROP EVENT IF EXISTS truncate_ieai_tables_hourly;
DELIMITER $$
CREATE EVENT truncate_ieai_tables_hourly
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP -- 从当前时间开始执行
DO
BEGIN
-- 执行清空表的SQL(按顺序执行)
TRUNCATE TABLE ieai_workflowinstance;
TRUNCATE TABLE IEAI_ACTSTATEDATA;
TRUNCATE TABLE IEAI_REQUESTSTATEDATA;
TRUNCATE TABLE ieai_execact;
TRUNCATE TABLE ieai_run_instance;
TRUNCATE TABLE ieai_run_instance_his;
TRUNCATE TABLE ieai_runinfo_instance;
TRUNCATE TABLE ieai_runinfo_instance_his;
TRUNCATE TABLE ieai_blob;
TRUNCATE TABLE ieai_actruntime;
TRUNCATE TABLE ieai_actruninfo;
TRUNCATE TABLE ieai_biz_unique;
TRUNCATE TABLE ieai_callworkflow_info;
TRUNCATE TABLE ieai_shellcmd_output;
TRUNCATE TABLE ieai_remoteexecact;
TRUNCATE TABLE ieai_runinfo_step_succeed;
TRUNCATE TABLE ieai_runinfo_instance_param;
TRUNCATE TABLE ieai_runinfo_instance_param_his;
TRUNCATE TABLE ieai_errortask;
TRUNCATE TABLE ieai_iexecerror;
TRUNCATE TABLE ieai_flowenv;
DELETE FROM ieai_acttimeconfig;
END$$
执行频率:EVERY 1 HOUR 表示每 1 小时执行一次。
启动时间:STARTS CURRENT_TIMESTAMP 表示从创建事件的当前时间开始,首次执行后每隔 1 小时再次执行
权限:创建事件需要EVENT权限,执行TRUNCATE和DELETE需要对应表的权限。
查看事件:可通过 SHOW EVENTS; 查看已创建的事件。
关闭 / 启用事件:若需临时关闭,可执行 ALTER EVENT truncate_ieai_tables_hourly DISABLE;,启用则替换为 ENABLE。
参考文章:原文链接
该文章在 2025/11/1 16:03:14 编辑过