写在前面
使用 MySQL 的过程中,会碰到这么一个问题:看错误日志、慢查询日志的时候,时间总是和本地时间对不上,差了 8 个小时,这样分析起来就相对麻烦了一些。
新改进
为了方便对于不知道是什么原因导致日志时间差异,以及不知道如何解决的用户,MySQL 在 5.7.2 版本中新增了一个参数——log_timestamps
,用来解决此问题。
看一下官档是如何说的:
This variable was added in MySQL 5.7.2. Before 5.7.2, timestamps in log messages were written using the local system time zone by default, not UTC. If you want the previous log message time zone default, set log_timestamps=SYSTEM.
log_timestamps 这个参数主要是控制 error log、slow_log、genera log,等等记录日志的显示时间参数,但不会影响 general log 和 slow log 写到表 (mysql.general_log, mysql.slow_log) 中的显示时间。在查询行的时候,可以使用 CONVERT_TZ() 函数,或者设置会话级别的系统变量 time_zone 来转换成所需要的时区。
该参数全局有效,可以被设置的值有:UTC
和 SYSTEM
,默认使用 UTC
。它还支持动态设置,不过建议大家在配置文件中就写上,以免重启之后造成不必要的麻烦。
解决
说了这么多,大家应该也知道如何去解决上面这个问题了。
log_timestamps 参数默认使用 UTC 时区,这样会使得日志中记录的时间比中国这边的慢了 8 个小时,导致查看日志不方便。修改为 SYSTEM 就能解决问题。
mysql> SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| log_timestamps | UTC |
+----------------+--------+
mysql> SET GLOBAL log_timestamps = SYSTEM;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| log_timestamps | SYSTEM |
+----------------+--------+
参考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_timestamps