Amazon RDS for MySQLでタイムゾーンを設定するのはやめたほうがいいかもしれない

  • 26
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

情報が完全ではないのですが、事象例が少なかったので共有します。

現状、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