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
日本時間になりました!