调整RDS上的默认时区设置

new*_*bie 10 mysql timezone amazon-rds

我们最近切换到RDS实例,发现我们的数据库任务比预期提前4小时触发.在进一步调查时,问题是由RDS实例上的默认时区设置(UTC)引起的.由于此设置无法更改,因此我们希望使用此数据库实例在所有应用程序中全局修复代码级别的问题.我试图通过使用将我创建的数据库实例的时区设置为"US/Eastern"

set GLOBAL time_zone = 'US/Eastern'" OR
set time_zone = 'US/Eastern'"
Run Code Online (Sandbox Code Playgroud)

但是会产生错误"数据库错误:未知或不正确的时区:'美国/东部'"

你觉得我在这里做错了什么?有没有人使用过任何其他解决方案?

Mic*_*eim 9

遗憾的是,无法在RDS数据库参数组中设置default_timezone,因此您的尝试已经是正确的方向.

$ rds-describe-db-parameters default | grep "time_zone"
DBPARAMETER  default_time_zone                                                                   engine-default  string   static   false
Run Code Online (Sandbox Code Playgroud)

要通过SET GLOBAL设置全局值,您需要具有未作为RDS用户授予的SUPER权限.

设置time_zone的唯一方法是基于每个连接

mysql> SET time_zone = timezone;
Run Code Online (Sandbox Code Playgroud)

在我的机器上,我已经成功地尝试了美国/东部,但我有一个相当老一代的跑步.

要确定您可用的时区,请登录到您的框中

mysql -h yourboxhost.rds.amazonaws.com -u <youruser> -p
Run Code Online (Sandbox Code Playgroud)

并输入

mysql> SELECT * FROM mysql.time_zone_name;
Run Code Online (Sandbox Code Playgroud)

您应该获得可以在实例上设置的已安装和有效时区名称的列表

+----------------------------------------+--------------+
| Name                                   | Time_zone_id |
+----------------------------------------+--------------+
| Africa/Abidjan                         |            1 |
| Africa/Accra                           |            2 |
| Africa/Addis_Ababa                     |            3 |
| Africa/Algiers                         |            4 |
| Africa/Asmara                          |            5 |
| Africa/Asmera                          |            6 |
| Africa/Bamako                          |            7 |
| Africa/Bangui                          |            8 |
| Africa/Banjul                          |            9 |
| Africa/Bissau                          |           10 |
| Africa/Blantyre                        |           11 |
| Africa/Brazzaville                     |           12 |
| Africa/Bujumbura                       |           13 |
| Africa/Cairo                           |           14 |
etc...
Run Code Online (Sandbox Code Playgroud)

每次连接到数据库服务器时都必须设置time_zone

例如,如果你使用php Mysqli扩展,你可以这样做

$mysqli = mysqli_init();
mysqli_options($mysqli,MYSQLI_INIT_COMMAND,"SET time_zone = 'Africa/Brazzaville'" );
mysqli_real_connect($mysqli,$host, $user, $pass,$dbName) or die ('Unable to connect');
Run Code Online (Sandbox Code Playgroud)

否则只需手动(就让数据库连接器这样做而言)SET time_zone = '<YOUR_DESIRED_TIMEZONE>'在连接到数据库后立即执行查询

  • 如果您只是将`SET time_zone ='US/Eastern'改为`SET time_zone ='-5:00'`那么您可以避免mySql默认情况下在RDS中按名称识别时区的问题. (4认同)

jan*_*pio 5

现在可以修改RDS数据库实例的time_zone设置:https://aws.amazon.com/de/premiumsupport/knowledge-center/rds-change-time-zone/

  • 需要注意的是,必须在集群参数组上修改这一点(至少对于 aurora mysql 而言)。DB参数组只有default_time_zone,不可修改。 (2认同)