通过RDS参数组功能修改RDS数据库的RDS时区参数

一、背景

RDS是托管数据库,也叫做Managed Service,由云平台负责数据库创建、配置、集群、高可用、存储、数据复制、监控、快照、备份、诊断、扩缩容、更换机型等一系列功能。

这一些功能由云平台提供,意味着运行RDS的基础操作系统是不允许用户登陆的。虽然在创建数据库时候需要选择实例规格,例如选择m6g.2xlarge,意味着8vCPU/32GB的虚拟机,并且这个虚拟机会使用Amazon Linux系统。但是这一切用户不可见。RDS只对用户暴露数据库的SQL接口,例如SQL Server暴露1433端口,Oracle暴露1521端口,MySQL暴露3306端口,PostgreSQL暴露5432端口。RDS对外不暴露SSH端口。

如果此时有需要调整数据库服务的底层参数,例如在虚拟机上手工安装MySQL时候需要在/etc/my.cnf中配置参数,这时候应该如何调整?本功能就是RDS参数组提供的修改数据库参数功能。RDS参数组功能对各种RDS数据库均有效,本文仅以MySQL为例编写。

二、通过RDS参数组修改RDS MySQL数据库时区

1、查询MySQL数据库当前时区

AWS RDS默认采用UTC格林尼治标准时间,中国位于东八区,因此中国本地时间是UTC+8。

查询当前时区的办法是,通过MySQL命令行连接到RDS。此链接可以在EC2上完成,或者在跳板机型及其他数据库管理工具上完成。执行如下命令:

show variables where Variable_name like 'time_zone';

查询结果即可看到MySQL版本。如下截图。

可以看到本RDS数据库是UTC时区。

2、创建新的参数组并设置新的时区

注:AWS不允许修改RDS Default参数组。请新建一个参数组,起名为另外的名字,然后为数据库更换参数组。

在RDS页面左侧,进入参数组菜单,点击右侧的新建参数组。在选择参数组模版位置,选择默认的mysql 5.7,然后新建一个新的参数组。注意,如果当前已经正在使用别的参数组,这里也可以选择其他自定义参数组,从而将修改过的参数继承过来。

编辑这个新创建的参数组,搜索关键字 time_zone,然后可以看到如下搜索结果。选中名为time_zone的参数,然后修改为 Asia_Shanghai 即为北京时间。如下截图。

修改完成后,保存参数组。

3、更换现有数据库参数组

进入到当前正在运行的RDS数据库,点击编辑,在参数组下拉框中,选择刚修改过时区的参数组。如下截图。

修改参数组的最后一步,系统提示是否立刻应用修改。这里选择立刻修改或者下一个维护窗口都可以。

4、重启RDS生效

因为修改时区是需要reboot重启实例才生效的,因此在上一步的向导最后一步,选择立刻重启,或者选择下一个维护窗口重启都可以,请根据业务能否立刻停机来安排。

这里选择下一个停机窗口重启。如下截图。

如果向导最后一步选择了下一个维护窗口重启数据库的选项,为了让其立刻生效,还可以返回数据库实例清单界面,直接重启数据库实例。

需要注意的是,数据库只有在运行状态(绿色的Available)下才可以重启。如果之前还正巧也修改了其他设置,数据库状态显示“修改中”(Modifying)这时候是不能重启的,需要等待3-5分钟,状态回到绿色的Available状态下,才可以执行重启。如下截图。

至此数据库修改时区完成。

5、验证修改生效

重启数据库实例完成后,使用MySQL命令通过3306端口连接到数据库,执行如下命令。

show variables where Variable_name like 'time_zone';

查询结果如下。

可以看到修改时区成功。

三、参考文档

使用RDS参数组功能:

https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/USER_WorkingWithParamGroups.html