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'"
但是会产生错误"数据库错误:未知或不正确的时区:'美国/东部'"
你觉得我在这里做错了什么?有没有人使用过任何其他解决方案?
遗憾的是,无法在RDS数据库参数组中设置default_timezone,因此您的尝试已经是正确的方向.
$ rds-describe-db-parameters default | grep "time_zone"
DBPARAMETER  default_time_zone                                                                   engine-default  string   static   false
要通过SET GLOBAL设置全局值,您需要具有未作为RDS用户授予的SUPER权限.
设置time_zone的唯一方法是基于每个连接
mysql> SET time_zone = timezone;
在我的机器上,我已经成功地尝试了美国/东部,但我有一个相当老一代的跑步.
要确定您可用的时区,请登录到您的框中
mysql -h yourboxhost.rds.amazonaws.com -u <youruser> -p
并输入
mysql> SELECT * FROM mysql.time_zone_name;
您应该获得可以在实例上设置的已安装和有效时区名称的列表
+----------------------------------------+--------------+
| 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...
每次连接到数据库服务器时都必须设置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');
否则只需手动(就让数据库连接器这样做而言)SET time_zone = '<YOUR_DESIRED_TIMEZONE>'在连接到数据库后立即执行查询
现在可以修改RDS数据库实例的time_zone设置:https://aws.amazon.com/de/premiumsupport/knowledge-center/rds-change-time-zone/