Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在扩展服务器时,使用不同的时区是否会产生不利影响?_Php_Mysql_Apache - Fatal编程技术网

Php 在扩展服务器时,使用不同的时区是否会产生不利影响?

Php 在扩展服务器时,使用不同的时区是否会产生不利影响?,php,mysql,apache,Php,Mysql,Apache,我有一个主数据库(MySQL)托管在Ubuntu服务器上,机器时区设置为美国/纽约(默认)。 下面的命令显示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 So

我有一个主数据库(
MySQL
)托管在
Ubuntu服务器上,机器时区设置为美国/纽约(默认)。
下面的命令显示
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 date函数,还想将数据显示到用户本地时区中

mysql> @@global.time_zone, @@session.time_zone
目前,我正在将所有日期转换为美国/纽约时区,然后存储在
MySQL
数据库中,但这可能会影响性能。并通过按国家转换向用户显示

最好的方法是什么

顺便说一句,我使用的是
Apache
Mysql
PHP


提前谢谢。

什么是DST?

DST指的是夏令时或夏令时。当DST在春季开始时,我们的时钟会被设置为按一定的时间量向前,通常是1小时。这意味着跳过1小时,在时钟上,DST转换的日期只有23小时

DST的快速示例:

[mysqld]
default-time-zone=+00:00
ini_set("date.timezone", "UTC");
本例将向您展示DST的效果。我正在使用Windows 10作为我的操作系统

按照以下步骤了解DST在实际中的含义

步骤1:右键单击日期和时间(可在windows任务栏的右下角找到)

步骤2:单击调整日期/时间选项

步骤3:打开“自动调整夏令时”选项

步骤4:将“时区”设置为(UTC-6:00中央时间(美国和加拿大))

第5步:关闭“自动设置时间”选项

步骤6:在更改日期和时间标签下,单击更改

第7步:将日期设置为2019年3月10日,时间设置为凌晨1:59,然后单击更改

-现在看一分钟后你的电脑时间,它会从凌晨2:00计时到凌晨3:00。这是因为在夏季(DST时间开始时),您的时钟设置为实际时间向前1小时,而在DST时间结束时向后1小时。

-美国2019年夏令时从3月10日星期日凌晨2:00开始,到11月3日星期日凌晨2:00结束

*不要担心你的电脑时间会增加1小时,这将被2019年11月3日凌晨2:00减去

夏令时/夏令时问题:

[mysqld]
default-time-zone=+00:00
ini_set("date.timezone", "UTC");
由于时间不遵循主时间标准,因此可能会导致服务器应用程序出现一些问题。下面是一些受启用DST时区影响最大的区域

mysql> @@global.time_zone, @@session.time_zone
  • 实时聊天应用程序。
  • 跨多个区域扩展服务器。
  • 记录数据。
  • 事务性数据。
  • 数据库并发性。
  • NoSQL数据库扩展。
  • 性能点击率。
  • 处理全球访客。
  • 和其他用途。
DST解决方案:

[mysqld]
default-time-zone=+00:00
ini_set("date.timezone", "UTC");
-将MySQL时区更改为UTC(+0:00),只需更改my.conf文件(也称为my.INI、my.CNF)添加以下代码:

[mysqld]
default-time-zone=+00:00
ini_set("date.timezone", "UTC");
-PHP时区到UTC,只需使用以下代码即可:

[mysqld]
default-time-zone=+00:00
ini_set("date.timezone", "UTC");
-将服务器/系统时区更改为UTC。

有关DST的一些关键点:

[mysqld]
default-time-zone=+00:00
ini_set("date.timezone", "UTC");
  • DST不适用于协调世界时(UTC)。因为它基于协调的时间尺度

  • 一些国家没有实施DST,而是根据UTC差异使用自己的时区。例如,印度使用IST(印度标准时间)设置为亚洲/加尔各答或UTC+5:30。因此,您不必关心这些国家的时钟变化


“做这件事的最佳方法是什么?”你在这里真正想问什么?如果您可能遇到无效的转换时间、性能问题或两者兼而有之?@RaymondNijland bother,所有服务器都有不同的时区。现在,假设一个用户使用欧洲时区访问服务器1并执行一些操作,则会将一条记录插入到数据库的datetime或timestamp列中,例如id=1,datetime=2019-06-06 10:10:20,但如果来自服务器3的另一个用户执行了一个操作,则插入的时间将根据纽约时区。因此造成了数据库的时间问题。“因此造成了数据库的时间问题”我看不出这个用户案例有什么问题,它应该如何工作。。我怀疑,当您需要将所有服务器的数据放在一起,或者从欧盟连接/时区查询美国服务器并查看正确的时间时,会出现问题?我认为您应该阅读@RaymondNijland,谢谢您的帮助,我将执行这些步骤并让您知道如何进行。