首页 > 解决方案 > 使用 SYSTEM 时如何使用 MySQL Docker 修复日志中的时间戳,忽略夏令时?

问题描述

使用官方 mysql:5.7 docker 映像并在撰写此问题时,由于夏令时,当前本地时区是 PDT (-0700),而不是 PST (-0800)。

如果想设置 TZ 环境变量来设置容器中的系统时间并让 mysql 日志时间戳服从 SYSTEM 时间,我注意到虽然现在是夏令时(在 America/Los_Angeles),但 mysql 的日志即使系统日期戳服从并且 mysql 本身正确应用夏令时时区偏移,也会忽略这一点。看起来日志没有。

我怎样才能解决这个问题并仍然使用系统时间?(不是UTC)。

以下是如何查看我所指的内容:

在主机上:正确显示date +"%Y-%m-%d %T%z" 的结果。2021-10-24 19:32:45-0700-0700

仅从图像中检查容器中的系统时间戳:docker run -it --rm -e TZ='America/Los_Angeles' mysql:5.7 date +"%Y-%m-%d %T%z"结果2021-10-24 19:34:28-0700正确显示-0700

现在查看 mysql 的日志并告诉它使用 SYSTEM:docker run -it --rm -e TZ='America/Los_Angeles' -e MYSQL_ALLOW_EMPTY_PASSWORD=1 mysql:5.7 mysqld --log-timestamps=SYSTEM显示如下所示的日志,注意它们以-0700(PDT) 开始正确,但随后切换到-0800(PST)

2021-10-24 19:36:20-07:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.35-1debian10 started.
2021-10-24 19:36:20-07:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2021-10-24 19:36:20-07:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.35-1debian10 started.
2021-10-24 19:36:20-07:00 [Note] [Entrypoint]: Initializing database files
2021-10-24T19:36:20.526869-08:00 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-24T19:36:21.131790-08:00 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-24T19:36:21.196020-08:00 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-24T19:36:21.208429-08:00 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 56cacdbe-353c-11ec-baae-0242ac110004.

-0800并且该时间戳格式继续存在,并且在容器生命周期的最后几行中继续显示。

如果我还从该容器内部检查 mysql ,那里的数据库设置也显示PDT正确(至少现在):mysql -ve "SELECT CURRENT_TIMESTAMP, @@system_time_zone, @@session.time_zone;"

+---------------------+--------------------+---------------------+
| CURRENT_TIMESTAMP   | @@system_time_zone | @@session.time_zone |
+---------------------+--------------------+---------------------+
| 2021-10-24 19:49:02 | PDT                | SYSTEM              |
+---------------------+--------------------+---------------------+

似乎日志时间戳(在它开始显示的位置上方2021-10-24T19:36:20.526869-08:00 0)忽略了它是 PDT 并认为它是 PST,而在其他任何地方它都是正确的 PDT。

如何解决此问题并仍然使用 SYSTEM 与 UTC 进行日志?

标签: mysqldocker

解决方案


推荐阅读