情報が完全ではないのですが、事象例が少なかったので共有します。
現状、RDS for MySQLではtime_zoneはUTC固定となっていて編集することが出来ません。
そこでいくつかの代替案があるのですが…
- init_connectパラメータでtime_zoneを変える
- ストアドプロシージャを使う
- RDS接続毎にSESSIONスコープのtime_zoneを変える
最初にストアドプロシージャを使う方法を試したのですが、rebootしたタイミングで原因不明のエラーが発生するなど非常に不安定だったためやめました。
そのため、以前は接続毎に以下のSQLを発行してタイムゾーンを変更していました。
SET SESSION time_zone = 'Asia/Tokyo';
これで順調に動いていたのですが、RDSがバックアップでフェイルオーバーしたタイミングで、突然すべての接続が切断されてしまうようになりました…
ERROR 1184 (08S01): Aborted connection .. (init_connect command failed
このエラーは、以下に変更すると直りました。
SET SESSION time_zone = '+9:00';
原因ははっきりしていませんが、突然こういうことが起きて対処も難しいので、基本的にRDSで運用する場合はtime_zoneを変更しないでも大丈夫な設計にすべきなのかもしれません。
- 諦めてUTCで運用する
- ADDDATEやADDTIME関数を使う
- アプリ側でJSTの時刻を指定する
個人的にはアプリ側サーバーをNTPで時刻合わせして、date関数などを使って指定するのが一番なのかなぁと思います。
1月14日にOracleはタイムゾーンが変更できるようになったので、MySQLも早く対応して欲しいところです…
Amazon Web Services Blog: Amazon RDS for Oracle Database - New Database Version & Time Zone Option