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

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

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()

时间戳似乎与日志同步:

mysql> show variables;
timestamp               | 1456339753.062182 # 18:47
log_timestamps          | UTC

答案1

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

log_timestamps                   | UTC

所以我将其改为“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

日志中的时间从 18:54 切换到 10:54,正如应该的那样。

来自 MySQL 文档

  • 日志时间戳

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

答案2

如果您希望在 mysql 重新启动或重启后保持更改持久,请将其放入您的 my.cnf 文件中:

log_timestamps   = 'SYSTEM' 

相关内容