mysql执行脚本打印日志
MySQL是目前业界使用比较普及的关系型数据库管理系统,可以通过一系列的脚本执行语句来实现数据库的操作。由于MySQL查询语句不能满足一些复杂的数据库操作,如对数据库的迁移、维护、优化等,需要通过sql脚本来实现,而MySQL中的定时任务 可以定期执行某一条命令或者sql脚本,可以非常方便地实现定时执行sql脚本。然而,由于脚本可能比较复杂,有时候运行完成后不知道是否有问题,也不知道执行效率。定时任务执行SQL脚本时,打印完整的日志可以非常清晰的了解到脚本的运行状态和运行结果,可以帮助DBA排查问题,确定错误原因等。因此,本文将介绍MySQL定时任务如何设置日志以及如何从日志中读取定时任务的打印结果,以及如何打印带有标题的日志。
首先,先介绍MySQL定时任务的设置方式。MySQL中的定时任务可以通过MySQL 命令行工具设置,也可以通过MySQL 封装的可视化工具(如MySQL Workbench)进行设置。其中,如果通过MySQL 命令行工具,可以使用“CREATE EVENT”语句来定义定时任务,CREATE EVENT语法如下:
CREATE
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE
schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
其中,schedule表示定时任务运行的周期,语法如下:
AT timestamp [( expression )][ intervals]
例如,要创建每天执行一次的定时任务,可以使用如下语句:
CREATE EVENT delete_obsolete_data
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO
DELETE FROM some_table WHERE expire_date < NOW();
可以看到,可以在最后的DO的后面跟上sql语句,用来指定要执行的命令。
接下来,介绍MySQL定时任务如何设置日志以及如何从日志中读取定时任务的打印结果:MySQL定时任务执行SQL语句之前,先要设置日志,用来记录定时任务的执行过程及结果,否则在定时任务运行结束后,无法了解SQL语句的执行结果及原因。
MySQL定时任务的日志记录可以使用MySQL 的error,warning,general log日志或系统的syslog日志记录,其中log_error部分可以指定覆盖mysql.err文件,可使得其记录下更多信息。可以在my.cnf中设定log_error,log_warning,log_syslog参数来调整日志级别及日志文件。默认情况下,MySQL 会将定时任务执行情况记录到日志 及log_error表,可通过查看mysql.err文件来诊断定时任务的执行结果:
shell> tail -100 mysql.err
另外,还可以使用如下语句查询log_error表,获得定时任务的执行状态 :
mysql> select error_time,user_host,message
from mysql.log_error
where message like '%event%';
最后,介绍如何打印定时任务日志带有标题:在MySQL中,定时任务执行的日志可能会记录过多,而带有标题的日志可以更加清晰地显示出定时任务执行的相关信息,也更加容易读取和排查问题。
如果要打印定时任务带标题的日志,可以通过如下语句实现:
DO
SET @timestamp := Now();
SET @title := 'Task title';
SELECT concat('[' ,@title ,':',@timestamp ,']');
//... other sql state
可以看到,通过set关键字,可以设置并打印相应的标题,以及显示时间戳,从而更加清晰的显示定时任务的执行情况。
综上所述,虽然MySQL定时任务可以定期执行脚本,但是想要排查问题及获取相应信息,就需要设置日志,打印出定时任务运行的完整日志信息,并带有标题信息,以确保日志的可读性及清晰性。