如何设置MySQL *system_time_zone*为UTC而不改变我的系统时钟?


show variables like '%zone%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| system_time_zone | MST   |
| time_zone        | UTC   |
+------------------+-------+
select version();
+-----------+
| version() |
+-----------+
| 8.0.31    |
+-----------+

我的物理位置定期变化,这通常意味着我在不同的时区。例如,上周我在PST,这周我在MST。

当我再次开始在我正在开发的基于JVM的应用程序上工作时,我得到了一个错误:

. lang。IllegalArgumentException: HOUR_OF_DAY: 0 ->1

深入研究这个问题,我偶然发现了这个问题;原因:"数据库中存储了一个DATETIME(在我的例子中是一个TIME列)值,该值在DST丢失的小时内。">

如果我真的关心时区,那就好了,我不关心。让我把所有的事情调整一下,然后继续我的一天。我有/etc/my.cnfdefault_time_zone='UTC',我的JDBC驱动程序通过connectionTimeZone=UTC,我希望能做到这一点,但它没有。目前,我不得不将笔记本电脑的时钟设置为UTC作为解决方案,这在我看来是荒谬的。

所以,有没有一种方法来bash MySQL在头部,并允许我设置system_time_zone为UTC,即使我的实际时区是PST, MST, EST等?或者也许一种只考虑time_zone设置的方法也可能会奏效。

From MySQL docs

注意

对于某些Linux平台,MySQL安装从RPM或Debian包括systemd支持管理MySQL服务器启动和关闭。在这些平台上,没有安装mysqld_safe,因为这是不必要的。有关更多信息,请参见第2.5.9节"管理"MySQL Server with systemd " .

不使用mysqld_safe在使用Systemd对于服务器的管理是使用[mysqld_safe]或选项文件中的[safe_mysqld]部分不支持,可能导致致意外行为

例如/etc/my.cnfmysqld_safe部分中的timezone属性对基本上所有切换到systemd的Linux发行版没有任何影响。

AFAICT,除了滚动你自己的mysqld_safe启动脚本,让MySQL进程实际在UTC下运行的唯一方法是将你的系统时钟设置为UTC。

我想听听其他的;如果没有,那就太不幸了。

注。system_time_zone只读所以不能在MySQL命令行

设置编辑

有一种方法使用发行版提供的systemd驱动MySQL。在我的工作站上(Fedora 36),编辑/etc/sysconfig/mysql并添加"TZ"财产;对于UTC,您将执行TZ=UTC

看,system_time_zone现在是UTC,不管系统时钟。

最新更新