こんにちは、技術4課の多田です。
11/24に東京では初雪が観測されましたね。
たまたまその日に購入したCDに山下達郎さんの「クリスマス・イブ」のカバーが入っており、心身ともに冷えた1日を過ごしました。。
泣いてないです。
さて、今回は、技術3課の髙田が投稿したRDSのTips記事の関連エントリになります。
髙田が紹介した手法ではない方法でRDSのパラメーターグループで「init_connect」を無効化してみようと思います。
なお、今回確認したRDSの環境は以下の通りです。
- DB エンジン:MySQL
- バージョン:5.6.27
今回の対処について
髙田が紹介した手法では、以下のコマンドを実行し、init_connectのタイムゾーンをUTCからJSTに変更していました。
SET SESSION time_zone = CASE WHEN POSITION('rds' IN CURRENT_USER()) = 1 THEN 'UTC' ELSE 'Asia/Tokyo' END;
今回は、AWS CLIを使って以下の作業を行います。
- init_connectパラメーターを無効化
- time_zoneパラメーターをJSTに設定
1. init_connectパラメーターを無効化
パラメーターグループのinit_connectパラメーターの無効化を行います。
これは、init_connectで指定したタイムゾーンをUTCに戻すために行います。
コマンドは以下のとおりです。
aws rds reset-db-parameter-group --db-parameter-group-name <パラメーターグループ名> --no-reset-all-parameters --parameters ParameterName=init_connect,ApplyMethod=pending-reboot --region <リージョン名>
返り値は以下のように返ってきます。
パラメーターグループ変更後、変更を反映するためにはDBインスタンスの再起動が必要です。
再起動して反映します。
{ "DBParameterGroupName": "パラメーターグループ名" }
MySQLのタイムゾーンを確認してみますと、UTCの時刻に戻っていることを確認できました。
mysql> select now(); +---------------------+ | now() | +---------------------+ | 2016-11-25 06:35:40 | +---------------------+ 1 row in set (0.00 sec)
2.time_zoneパタメーターをJSTに設定
タイムゾーンがUTCになっていますので、time_zoneパラメーターをJSTに設定します。
以下のようにコマンドを実行します。
尚、下記のコマンドは、デフォルトのパラメーターグループ(default.mysql5.6等)の設定値は変更できません。
利用者が独自に作成したパラメーターグループのみ実行できます。
デフォルトのパラメーターグループをDBインスタンスにアタッチしていた場合は、デフォルトのパラメーターグループからコピーして作成したパラメーターグループをDBインスタンスにアタッチして、これを変更してください。
aws rds modify-db-parameter-group --db-parameter-group-name <パラメーターグループ> --parameters ParameterName=time_zone,ParameterValue=Asia/Tokyo,ApplyMethod=pending-reboot --region <リージョン名>
返り値は上記同様にパラメーターグループの名前が返されます。
設定の変更を反映するために、DBインスタンスの再起動を実行します。
再度、タイムゾーンを確認してみますと、JSTに変更されました!
mysql> select now(); +---------------------+ | now() | +---------------------+ | 2016-11-25 16:18:24 | +---------------------+ 1 row in set (0.00 sec)
まとめ
time_zoneパラメーターでJST指定ができるようになったため、既にパラメーターグループの変更や、
RDSを新規作成時にJST指定していらっしゃる方もいるかと思います。
タイムゾーンをUTCで設定していてJSTに変更を検討される場合、DBインスタンスの再起動が発生するため、
変更のタイミングには注意が必要です。
本記事が少しでも役立てば幸いです。では!