如何设置数据库时区的AWS RDS实例[复制](How to set database timezo

2019-08-17 07:30发布

这个问题已经在这里有一个答案:

  • 调整默认的时区设置RDS上 5个回答

我们采用了AWS RDS实例最新的MySQL服务器,我们已经配置为美国东部的数据中心运行。 我们假设任何新的Date()或Time.now()的调用将存储在数据库服务器运行时区的日期。

有没有办法指向美国东运行我的AWS RDS实例指向PST时区,所以该日期的任何持久化存储将在太平洋标准时间,而不是EST值。 (即如果储存大约10 16:00的对象,该数据库列应反映7 AM EST代替)。

Answer 1:

我的答案的其余部分之前,我只是想,现在,如果您有任何选项来改变你的应用程序中使用UTC将现在和将来为你节省很多悲伤的建议。

不过鉴于你的问题的情况下,我猜想,这是不是一种选择,那你适应设计,使用MySQL在传统的服务器环境,在那里你可以改变时区,并有代码逻辑的系统预计该时区并不能很容易地适应使用UTC。

但是,如果你真的需要它来存储为PST,请继续阅读。


你是正确的,MySQL将使用服务器的时区默认情况下为时间戳存储,但是你的假设RDS实例有自己的时区基于它们所推出的AWS区域设置是不正确 -所有RDS实例与他们的时区设置为被推出UTC, 和这个配置不能更改:

时区目前还没有修改。 的确有一个参数值rds-describe-db-parameters称为“default_time_zone”,但它被标记为不可修改。

所以你唯一的选择是设置时区您的应用程序对数据库实例PST每个连接上。 您可以使用SET SESSION time_zone = 'PST'查询每一个应用程序,使通过以下两个步骤连接执行这里找到 :

  1. 创建以下存储过程(UTC-8是PST):

     DELIMITER | CREATE PROCEDURE mysql.store_time_zone () IF NOT (POSITION('rdsadmin@' IN CURRENT_USER()) = 1) THEN SET SESSION time_zone = '-8:00'; END IF | DELIMITER ; 
  2. 连接到您的实例,并运行以下命令:

     $ rds-modify-db-parameter-group PARAMGROUP --parameters "name=init_connect, value='CALL mysql.store_time_zone', method=immediate" 
  3. 您可能需要授予EXECUTE权限将被连接到数据库的用户,否则你可能会得到一个连接错误:

     GRANT EXECUTE ON PROCEDURE mysql.store_time_zone TO 'user'@'host'; 

现在,通过任何客户对你的RDS实例执行的每个查询应该使用PST没有修改任何应用程序逻辑,而不需要在数据库中更新任何先前存储的时间戳。



文章来源: How to set database timezone for a AWS RDS instance [duplicate]