RDS(MySQL)でJSTを使う たった1つの冴えたやり方

  • 170
    Like
  • 0
    Comment
More than 1 year has passed since last update.

RDS(MySQL)でJSTを使う たった1つの冴えたやり方

RDS(MySQL)のシステム標準設定はUTCかつ変更不可能

$ date
2014年 5月30日 金曜日 20時56分02秒 JST
$ echo 'select now()' | mysql -h mysql.foobar.ap-northeast-1.rds.amazonaws.com -u admin -p 
Enter password: 
now()
2014-05-30 11:56:20

アンチパターン

init_connect に "SET SESSION time_zone = 'Asia/Tokyo';"と書く

→フェイルオーバー時にハマる (rdsadminユーザなどではTimezoneがUTCでないとダメ)

ストアドプロシージャを入れて init_connect から呼ぶ

例)

IF NOT (POSITION(‘rdsadmin@’ IN CURRENT_USER()) = 1) THEN
SET SESSION time_zone = ‘Asia/Tokyo’;
END IF

→ ストアド入れる前にパラメータグループ適用しちゃったりとかでハマる

おそらく一番簡単なやり方

下記をinit_connectに設定する

SET SESSION time_zone = CASE WHEN POSITION('rds' IN CURRENT_USER()) = 1 THEN 'UTC' ELSE 'Asia/Tokyo' END;

rdsで始まるユーザ名であった場合UTCを、そうでない場合には日本時間に設定
適用後)

$ date
2014年 5月30日 金曜日 21時04分48秒 JST
$ echo 'select now()' | mysql -h mysql.foobar.ap-northeast-1.rds.amazonaws.com -u admin -p 
Enter password: 
now()
2014-05-30 21:04:57

日本時間になりました!