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)。
1
2
3
4
5
6
7
8
9
10
11
|
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 ;
|
確認Stored Procedure好不好用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
mysql
> select now();
+---------------------+
|
now() |
+---------------------+
|
2015-04-09 05:10:41 |
+---------------------+
1
row in set (0.00 sec)
mysql
> CALL shared.store_time_zone;
Query
OK, 0 rows affected (0.07 sec)
mysql
> select now();
+---------------------+
|
now() |
+---------------------+
|
2015-04-09 13:10:52 |
+---------------------+
1
row in set (0.00 sec)
|
確認到時間變為中國標准時間(比UTC快8小時)。
2.創建Parameter Group
RDS上是以Parameter Group的形式來管理,MySQL的參數,在這里不修改默認的Parameter Group,創建一個Parameter Group。
- 點擊:Parameter Groups
- 點擊:Create Parameter Group
- Parameter Group Family:選擇mysql5.6(因為我們的RDS MySQL版本是5.6.22)
- Group Name:timezone-Chongqing
- Description:init_connect call store_time_zone
- 選擇:timezone-chongqing
- 點擊:Edit Parameters
- init_connect:CALL shared.store_time_zone
- 點擊:Save Changes
- 選擇:RDS實例(awspack)
- 點擊:Instance Actions
- 點擊:Modify
- DB Parameter Group:timezone-chongqing
- 點擊:Continue
- 確認:DB Parameter Group為timezone-chongqing
- 點擊:Modify DB Instance
當用戶連接到RDS時,通過init_connect調用Stored Procedure。
3. 重啟RDS
重啟RDS實例之前確認一下,Parameter Group的狀態在applying。
- 點擊:RDS Dashboard的Instances
- 選擇:RDS實例awspack
- 點擊:Instance Actions
- 點擊:Reboot
重啟RDS實例之后確認,Parameter Group的狀態為in-sync
以aws_rds用戶登錄到MySQL以后查看,時間為中國時間。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
$
mysql -h awspack.crhydmkxhg6d.ap-northeast-1.rds.amazonaws.com -uaws_rds -p
Enter
password:
Welcome
to the MySQL monitor. Commands end with ; or \g.
Your
MySQL connection id is 7
Server version: 5.6.22-log MySQL Community Server (GPL)
Copyright
(c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle
is a registered trademark of Oracle Corporation and/or its
affiliates.
Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql
> show global variables like 'init_connect';
+---------------+-----------------------------+
|
Variable_name | Value |
+---------------+-----------------------------+
|
init_connect | CALL shared.store_time_zone |
+---------------+-----------------------------+
1
row in set (0.00 sec)
mysql
> select now();
+---------------------+
|
now() |
+---------------------+
|
2015-04-09 13:44:10 |
+---------------------+
1
row in set (0.00 sec)
|