MySQL 记录的时间与 NOW() 不同

aaa*_*ica 3 mysql time logging

MySQL 服务器记录的条目与系统或 mysql 本身的时间不同:

mysql> select @@global.time_zone;
+--------------------+
| @@global.time_zone |
+--------------------+
| SYSTEM             |
+--------------------+
mysql> select NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2016-02-24 10:47:30 |
+---------------------+

# /var/log/mysql/mysql_queries.log
2016-02-24T18:47:11.191126Z    2 Connect        root@localhost on  using Socket
2016-02-24T18:47:11.191421Z    2 Query  select @@version_comment limit 1
2016-02-24T18:47:16.769493Z    2 Query  select @@global.time_zone
2016-02-24T18:47:30.503214Z    2 Query  select NOW()
Run Code Online (Sandbox Code Playgroud)

时间戳似乎与日志同步:

mysql> show variables;
timestamp               | 1456339753.062182 # 18:47
log_timestamps          | UTC
Run Code Online (Sandbox Code Playgroud)

aaa*_*ica 9

解决方案非常简单:查看变量并尝试找到相关的:

log_timestamps                   | UTC
Run Code Online (Sandbox Code Playgroud)

所以我把它改成了'SYSTEM':

mysql> SET GLOBAL  log_timestamps  = 'SYSTEM';

# /var/log/mysql/mysql_queries.log
2016-02-24T18:54:23.837289Z    2 Query  SET GLOBAL  log_timestamps  = 'SYSTEM'
2016-02-24T10:54:25.949232-08:00    2 Query     show variables
Run Code Online (Sandbox Code Playgroud)

日志中的时间应该从 18:54 切换到 10:54。

来自 MySQL 文档

  • 日志时间戳

此变量控制错误日志消息以及写入文件的一般查询日志和慢速查询日志消息的时间戳时区。它不影响写入表(mysql.general_log、mysql.slow_log)的一般查询日志和慢查询日志消息的时区。可以使用 CONVERT_TZ() 或通过设置会话 time_zone 系统变量将从这些表中检索到的行从本地系统时区转换为任何所需的时区。