AWS RDS의 타임존 변경하기

[markdown]

최근까지 N모사의 클라우드 서비스를 사용하다가, 혼자서 서버를 관리해야하는 부담 때문에 AWS로 넘어왔다. 그러면서 기존에 구상해 두었던, 서버 아키텍쳐를 AWS로 다 옮기는 중에 있는데, 그중에 하나는 Mysql-cluster를 RDS로 옮기기로 한 결정이었다. 그래서 RDS 인스턴스를 만들어보고 테스트 중에 있는데, 아니 타임존이 UTC로 되어 있어서 시간이 내가 의도한대로 나오지 않는 것이었다!

이걸 고치는 법을 아마존에서 공식적으로 지원하지는 않는 것으로 보이고(오라클은 최근에 지원이 되기 시작했다!) 뭔가 다른 방법으로 해야될 것 같아서 찾아보니 DB프로시져를 이용하는 방법이 있었다.

간단히 단계를 살펴보자면 아래와 같다.

1. 스토어드 프로시져의 작성
2. Parameter Group의 작성
3. RDS에 Parameter Group을 적용
4. RDS 인스턴스 재시작

이 작업을 하면서 주의해야될게 하나 있는데 `rdsadmin` 이라는 유저는 AWS쪽에서 DB인스턴스 관리용으로 사용되는 녀석으로 타임존을 건드리면 이상하게 동작할 것 같으니 이녀석의 타임존은 안건드려야 한다는 것이다.

이제 스토어드 프로시져부터 만들어보자

### 1. 스토어드 프로시져 만들기

프로시져 명을 `mysql.store_time_zone`이라고 했는데, `mysql`에는 실제로 사용할 DB의 이름을 넣도록 하자. 귀찮으면 그냥 둬도 상관은 없다.

“`sql
DELIMITER |
CREATE PROCEDURE mysql.`store_time_zone`()
IF NOT (POSITION(‘rdsadmin@’ IN CURRENT_USER()) = 1) THEN
SET SESSION time_zone = ‘Asia/Seoul’;
END IF |

DELIMITER ;
“`

### 2. Parameter Group 만들기

RDS에서는 MySQL의 파라메터를 `Parameter Group`으로 그룹단위로 관리하고 있다. mysql의 세션이 최초 접속시에 위에서 만들어둔 프로시져를 실행하도록 `init_connect`파라메터를 설정하기 위한 `Parameter Group`을 만들자.

RDS의 Parameter Groups에 들어가서 `Create DB Parameter Group`을 클릭한다.

![그림1](http://gyus.me/wp-content/uploads/2014/10/1-1-1.png)

`Yes, Create`를 클릭!

![그림2](http://gyus.me/wp-content/uploads/2014/10/2-1-1.png)

store-time-zone을 선택후 `Edit Parameters`를 클릭하자.

엄청 많은 파라메터들이 있는데 `init_connect` 파라메터를 찾아서 아래의 `CALL` 명령어를 입력하자

“`sql
CALL mysql.store_time_zone
“`

![그림3](http://gyus.me/wp-content/uploads/2014/10/31-1-1.png)

설정이 끝났으면 위로 올라와서 `Save Changes`를 클릭해서 설정을 저장한다.

![그림4](http://gyus.me/wp-content/uploads/2014/10/4-1-1.png)

### 3. RDS에 파라메터 그룹을 설정하기

![그림5](http://gyus.me/wp-content/uploads/2014/10/5-1-1.png)

RDS instance메뉴로 가서 DB Instance를 선택한다음 마우스 오론쪽을 클릭해서 `Modify` 메뉴로 들어가자.

`Parameter Group`을 위에서 작성한 그룹으로 변경하고 `Apply Immediately`를 체크하고 변경하자.
![그림6](http://gyus.me/wp-content/uploads/2014/10/6-1-1.png)

### 4. DB인스턴스의 재시작

적용후 DB인스턴스를 재시작해주면 된다.

잘 적용 되었는지 DB에 접속해서 확인을 해보자. 아래와 같이 쿼리를 날리면 아마 바뀌어진 타임존으로 시간이 나올 것이다.

적용전/적용후를 알 수가 없지만, 이 글을 포스팅한 시간이 2014년 10월 10일 오후 5시 50분경이니 잘나오는거라고 보시면 된다. ^^;

“`sql
mysql > select now();
“`

![그림7](http://gyus.me/wp-content/uploads/2014/10/7-1-1.png)

### Tip 커맨드라인으로 변경하기
** ※ `AWS RDS API`는 사용가능 한 상태임을 가정한다. **

앞서 본것 처럼 웹콘솔에 들어가서 작업을 해도 되지만, API로 하는 방법도 있다.
단계는 동일한데 단순히 API를 쓴다는 것만 다르다.

– 프로시져를 만든다.
– 파라메터 그룹을 만든다.
– RDB인스턴스의 파라메터 그룹 설정을 변경한다.
– RDB인스턴스 재시작

`프로시져는 위에서 만들어 봤으므로 생략하겠다`

#### 파라메터 그룹 만들기

아래의 커맨드로 그룹을 쉽게 만들 수 있다.

“`shell
$ rds-create-db-parameter-group store-time-zone –db-parameter-group-family mysql5.6 –description “change time zone” –region “ap-northeast-1”
“`

#### 파라메터 그룹 설정 적용하기

아래의 커맨드로 만든 그룹에 대한 설정을 하고 적용을 바로 할 수 있다.

“`shell
$ rds-modify-db-parameter-group PARAMGROUP –parameters “name=init_connect, value=’CALL mysql.store_time_zone’, method=immediate”
“`

#### 재시작도 해보자

**※ rdb 인스턴스 명을 알고 있어야 한다.**

“`shell
$ rds-reboot-db-instance {rdb instance 명}
“`

[/markdown]

“AWS RDS의 타임존 변경하기”의 3개의 생각

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다