Mysql event不执行问题

博客指出MySQL的event定时任务未执行,原因是重启MySQL后,event_scheduler变为OFF。解决办法是更改配置文件并重新启动MySQL,以确保事件调度器正常工作。

现象
mysql的event定时任务没有执行

原因
重启mysql之后,event_scheduler 变成了 OFF

解决办法
更改配置文件 /etc/my.cnf 加入一段event_scheduler=1 在重启mysql systemctl restart mariadb

<think>嗯,用户现在问的是如何在MySQL中查看事件执行记录。首先我得回想一下MySQL事件调度器相关知识。事件MySQL中用于定期执行任务的机制,类似于定时任务。用户想知道这些事件什么时候执行过,有没有执行成功之类的记录。 首先,MySQL事件执行情况默认可能会记录到日志里。需要确认是否开启了相关日志。我记得可以通过几种方式来查看事件的历史执行情况,比如检查错误日志,或者使用information_schema的事件表。首先,检查事件是否启用,使用SHOW VARIABLES LIKE 'event_scheduler';。如果没启用的话,事件会运行的,自然也没有记录。但用户的问题应该是已经启用了事件,需要查看记录。 然后,考虑查看错误日志。如果事件执行过程中有错误,可能会记录到错误日志里。错误日志的位置可以通过SHOW VARIABLESLIKE 'log_error';来查看。但这种方法只能看到出错的情况,正常执行会记录。另外,information_schema中的EVENTS表存储了事件的定义信息,比如EVENT_NAME、LAST_EXECUTED等,但可能包括详细的执行历史。比如LAST_EXECUTED字段会显示最后一次执行的时间,但之前的执行会保存。 那有没有办法记录所有事件执行情况呢?可能需要自己创建一个日志表,在事件中增加插入日志的语句。比如在事件执行的任务前后,插入一条记录到自定义的表中,记录执行时间和状态。这样就能自己维护一个执行历史了。 例如,创建一个event_log表,包含时间戳、事件名称、状态等信息。然后在事件的定义里,把插入日志的语句加到执行的SQL语句中。过这样需要在每个事件中添加代码,可能有点麻烦,但比较可靠。另外,MySQL的通用查询日志或者慢查询日志是否记录事件执行的SQL?如果开启的话,可能会记录,但需要确认。过通用日志会记录所有查询,可能数据量太大,太适合专门查看事件执行记录。 总结一下,方法可能有: 1. 查看information_schema.EVENTS中的LAST_EXECUTED。2. 检查错误日志中的事件错误信息。 3. 启用通用查询日志,但需要配置。 4. 自定义日志表,手动记录事件执行情况。用户可能需要具体的步骤和示例代码,比如如何创建日志表,如何修改事件定义。比如: 创建日志表: CREATE TABLE event_log ( idINT AUTO_INCREMENT PRIMARYKEY, event_name VARCHAR(64), execution_timeDATETIME,status VARCHAR(10), messageTEXT ); 在事件中添加日志记录: DELIMITER$$ CREATE EVENT my_event ON SCHEDULE EVERY1 DAY STARTS CURRENT_TIMESTAMP DOBEGIN DECLARE CONTINUEHANDLER FOR SQLEXCEPTIONBEGININSERT INTO event_log(event_name,execution_time, status, message)VALUES ('my_event', NOW(), 'error', 'Erroroccurred'); END; INSERT INTOevent_log (event_name, execution_time, status)VALUES ('my_event', NOW(), 'success'); --这里写事件实际要执行的SQL-- ...END$$ DELIMITER ; 这样每次事件执行都会在event_log中记录成功或错误的信息。同时,如果事件本身的SQL有错误,会被异常处理器捕获,并插入错误日志。可能还需要提醒用户,确保事件调度器是启用的,SET GLOBALevent_scheduler =ON;。 至于相关的问题,应该包括事件调度器的启用、事件的创建、日志表的维护,以及如何查看错误日志等。比如: 1.如何启用MySQL事件调度器?2. 如何创建一个每天执行事件? 3.如何查看MySQL的错误日志位置? 4. 如何自动记录事件的每次执行结果? 这样用户如果有后续问题,可以进一步了解事件的配置和管理。</think>在MySQL中查看事件Event执行记录可以通过以下方法实现: ### 方法1:通过`information_schema.EVENTS`表查看最后一次执行时间 ```sql SELECT EVENT_NAME, LAST_EXECUTED, STATUS, STARTS, ENDS FROM information_schema.EVENTS WHERE EVENT_SCHEMA = 'your_database_name'; ``` **解释**: 该查询可以获取事件的最后执行时间(`LAST_EXECUTED`)和状态,但只能显示最后一次执行时间,无法查看历史记录。 --- ### 方法2:启用MySQL通用日志(需重启/配置) 1. 修改`my.cnf`配置文件: ```ini [mysqld] general_log = 1 general_log_file = /var/log/mysql/general.log ``` 2. 重启MySQL服务后,所有事件执行的SQL语句都会被记录到通用日志中。 **解释**: 通用日志会记录所有客户端执行的SQL语句,包括事件调度器执行的语句,但会产生大量日志数据。 --- ### 方法3:创建自定义日志表(推荐) 1. 创建日志表: ```sql CREATE TABLE event_execution_log ( id INT AUTO_INCREMENT PRIMARY KEY, event_name VARCHAR(64), execution_time DATETIME, status ENUM('success', 'error'), error_message TEXT ); ``` 2. 在事件中添加日志记录: ```sql DELIMITER $$ CREATE EVENT your_event_name ON SCHEDULE EVERY 1 DAY DO BEGIN DECLARE exit handler for sqlexception BEGIN INSERT INTO event_execution_log (event_name, execution_time, status, error_message) VALUES ('your_event_name', NOW(), 'error', LEFT(SQLERRM, 200)); RESIGNAL; END; -- 这里是事件的实际操作 YOUR_SQL_OPERATIONS_HERE; -- 记录成功日志 INSERT INTO event_execution_log (event_name, execution_time, status) VALUES ('your_event_name', NOW(), 'success'); END$$ DELIMITER ; ``` **解释**: 通过自定义日志表和事件中的异常处理,可以完整记录每次事件执行的结果和错误信息。 --- ### 方法4:查看错误日志 ```sql SHOW VARIABLES LIKE 'log_error'; ``` 执行后打开显示的日志文件路径,搜索事件名称即可找到相关错误记录。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值