我在MySQL
上托管了一个主数据库(Ubuntu Server
),其计算机时区设置为America / New York(默认)。
下面的命令显示MySQL
正在使用系统时区。
mysql> @@global.time_zone, @@session.time_zone
我有3台服务器托管在不同的区域。基本上是靠近用户群的区域。
Server 1 : Hosted on Europe Region.
Server 2 : Hosted on North America Region.
Server 3 : Hosted on South America Region.
这些服务器通过负载平衡器并使用Round-robin
方法进行管理。所有这些服务器都将数据存储在同一MySQL
服务器上。
所有这些服务器都有其本地时区,并且都是不同的时区。
我想扩展主数据库以承担额外的负载,还希望在亚洲添加一些新服务器。
在不久的将来为多台服务器使用不同的时区是否会引起问题?还是应该对所有服务器(美国/纽约)和数据库服务器使用相同的时区?但是我想在选择数据时使用 mysqli日期函数,并且还希望将数据显示到用户本地时区。
当前,我将所有日期都转换为美国/纽约时区,然后存储在MySQL
数据库中,但这可能会影响性能。并通过按国家/地区进行转换来向用户显示。
执行此操作的最佳方法是什么?
我正在使用Apache
,Mysql
和PHP
。
谢谢。
答案 0 :(得分:1)
什么是DST?
DST是指夏令时或夏令时。 DST在春天开始时,我们的时钟会提前一定的时间,通常是1小时。这意味着将跳过1个小时,从时钟开始,DST转换的日期只有23个小时。
DST的快速示例:
此示例将向您展示DST的效果。我正在使用Windows 10作为操作系统。
请按照以下步骤查看DST在实际中的含义。
第1步::右键单击“日期和时间”(位于Windows任务栏的右下角)。
步骤2:单击调整日期/时间选项。
第3步::打开-“自动调整夏令时”选项。
第4步::将“时区”设置为(UTC-6:00中部时间(美国和加拿大))。
步骤5:关闭-“自动设置时间”选项。
步骤6::在“更改日期和时间”标签下,单击“更改”。
STEP 7::将“日期”设置为2019年3月10日,将时间设置为1:59 AM,然后单击“更改”。
-现在查看1分钟后的PC时间,而不是凌晨2:00,它将显示为3:00 AM。这是因为在夏季(夏令时开始时间),您的时钟被设置为比实际时间早1个小时,而夏令时结束时则向后退1小时。
-美国的夏令时2019从3月10日星期日凌晨2:00开始,到11月3日星期日凌晨2:00结束
*不用担心会为您的PC时间增加一小时,它将在2019年11月3日凌晨2:00减去。
具有夏时制/夏令时的问题:
由于时间不符合主要时间标准,因此可能会对服务器应用程序造成一些问题。以下是受DST启用的时区影响最大的区域。
DST解决方案:
-将MySQL时区更改为UTC(+0:00),只需更改my.conf文件(也称为My.INI,my.CNF),添加以下代码:
[mysqld]
default-time-zone=+00:00
-PHP时区为UTC,只需使用以下代码即可:
ini_set("date.timezone", "UTC");
-将服务器/系统时区更改为UTC。
有关DST的一些要点:
DST不适用于世界标准时间(UTC)。因为它基于协调的时间尺度。
某些国家/地区尚未实施DST,而是根据UTC时差使用自己的时区。例如,印度使用IST(印度标准时间)设置为Asia / Kolkata或UTC + 5:30,因此您没有不必担心更改这些国家/地区的时钟。