標籤:
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)。
| 1234567891011 |
mysql> CREATE DATABASE shared;Query OK, 1 row affected (0.00 sec) mysql> DELIMITER |mysql> CREATE PROCEDURE shared.`store_time_zone`() -> IF (POSITION(‘[email protected]‘ 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好不好用
| 123456789101112131415161718 |
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以後查看,時間為中國時間。
| 1234567891011121314151617181920212223242526272829 |
$ mysql -h awspack.crhydmkxhg6d.ap-northeast-1.rds.amazonaws.com -uaws_rds -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 7Server 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 itsaffiliates. Other names may be trademarks of their respectiveowners. 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) |
更改 AWS RDS mysql時區 -摘自網路