MySQL慢查询日志时间错误的解决方法

log_timestamps参数是MySQL在5.7.2版本新引入的参数,这个参数主要是控制MySQL的错误日志、慢查询日志、genera log等记录日志的显示时间参数,但不会影响写到表 (mysql.general_log, mysql.slow_log) 中的显示时间。

问题现象

某客户使用阿里云数据库产品时发现,1月6号的慢查询日志中存在1月5号的时间戳

原因分析

经过阿里云数据库工程师定位,确认是由于参数 log_timestamps=UTC 导致的。log_timestamps的取值含义如下:

  • UTC:使用UTC时间,5.7版本默认取值UTC,显示的时间戳距离北京时间少8小时
  • SYSTEM:使用本地时间,本地时间=UTC+时区差

解决方案

登录阿里云数据库控制台,在『参数配置』页面,找到log_timestamps参数,将UTC修改为SYSTEM即可

案例复现

1、log_timestamps=UTC登录阿里云数据库实例查看参数设置和当前系统时间:

执行测试SQL构造慢查询:

select sleep(10);

在慢日志中查看,UTC格式时间比本地时间少了8小时:

2、log_timestamps=SYSTEM在控制台-参数配置中修改取值设置:

登录阿里云数据库实例查看参数设置和当前系统时间:

执行测试SQL构造慢查询:

select sleep(10);

在慢日志中查看,显示的是本地时间。