AWS RDS
AWS上搭建数据库的时候,不是DB on EC2就是RDS,但是选择RDS时,Timezone怎么处理?
「面向全球提供的AWS来讲理所当然的是UTC」,而RDS也不是例外。把服务器迁移到AWS时,「数据库能不能使用中国时间」是常见的一个问题。 DB on EC2的话,配置一下系统的Timezone就可以,但是RDS是我们无法直接登录的因此需要使用MySQL的功能来实现。
介绍如何修改RDS MySQL的Timezone。
在RDS的Master用户不同于MySQL root用户,因此没有SUPER权限(管理者权限)。因此不能使用SET GLOBAL命令修改Timezone。在这里使用MySQL的init_connect参数里使用SET SESSION命令来修改Timezone。Init_conect参数实在Parameter Group里进行修改。
注意事项
rdsadmin用户貌似是AWS用来管理RDS实例的用户,无法判断影响范围因此不修改rdsadmin的Timezone。
在init_connect参数里直接填写命令会无法正常运行,因此定义Stored Procedure,用CALL方式执行
操作流程如下
创建Stored Procedure
创建Parameter Group
Parameter Grouup关联到RDS
重启RDS
1.创建Stored Procedure
以Master用户登录到RDS,shared Schema创建Stored Procedure(shared.store_time_zong)。
把时间配置为中国标准时间(Asia/Chongqing)。
mysql> CREATE DATABASE shared;
Query OK, 1 row affected (0.00 sec)
mysql> DELIMITER |
mysql> CREATE PROCEDURE shared.`store_time_zone`()
-> IF (POSITION('aws_rds@' IN CURRENT_USER()) = 1) THEN
-> SET SESSION time_zone = 'Asia/Chongqing';
-> END IF |
Query OK, 0 rows affected (0.01 sec)
mysql> DELIMITER ;
1
2
3
4
5
6
7
8
9
10
11
mysql>CREATEDATABASEshared;
QueryOK,1rowaffected(0.00sec)
mysql>DELIMITER|
mysql>CREATEPROCEDUREshared.`store_time_zone`()
->IF(POSITION('aws_rds@'INCURRENT_USER())=1)T