• No : 809
  • 公開日時 : 2014/05/19 15:39
  • 更新日時 : 2022/01/18 14:47
  • 印刷

MySQLエンジンでタイムゾーンをUTCから他のものに変更することは可能ですか?

回答

ニフクラRDBのシステムユーザー(rdbadmin)が時刻に関する整合性を保つために、MySQLエンジンのDBサーバーのタイムゾーンはUTCに設定されており、これを変更することはできません。

 

ただし、下記の手順を実施することで、お客様に発行されたマスターユーザーや、お客様が追加で作成したユーザーにのみ特定のタイムゾーンを適用することが可能です。

 
  1. ストアドプロシージャを作成する
    rdbadmin以外のユーザーが接続している場合にタイムゾーンを他のものに変更するストアドプロシージャを作成します。

  2. 上記ストアドプロシージャ呼び出しをDBパラメーターグループのinit_connectに設定する。
    init_connectパラメーターにストアドプロシージャ呼び出しを設定するとMySQLに接続するたびにストアドプロシージャが実行されるようになります。

  1. ストアドプロシージャの作成

    MySQLにログインし、下記コマンドでデータベースおよびストアドプロシージャを作成します。

     
    # ストアドプロシージャを紐付けるためのデータベース作成(名前はshared以外でも問題ありません)
    mysql< CREATE DATABASE shared
    Query OK, 1 row affected (0.01 sec)

    # ストアドプロシージャの作成
    mysql< DELIMITER | mysql< CREATE PROCEDURE shared.`store_time_zone`()
    -< IF NOT (POSITION('rdbadmin@' IN CURRENT_USER()) = 1) THEN
    -< SET SESSION time_zone = 'Asia/Tokyo';
    -< END IF | Query OK, 0 row affected (0.01 sec)
    # デリミタを|から;に戻しておく
    mysql< DELIMITER ;
     

    なお、マスターユーザー以外の新規に追加したユーザーでストアドプロシージャを作成するにはマスターユーザーでログインし下記のような権限付与を行う必要があります。

     
    GRANT ALL ON shared.* to ユーザー名@'%' identified by 'パスワード';

  2. ストアドプロシージャをinit_connectパラメーターに設定
    まず、新規にDBパラメーターグループを作成し、init_connectパラメーターに下記を設定します。
     
    CALL shared.store_time_zone
     
    次に、タイムゾーンを変更したいDBサーバーに上記DBパラメーターグループを適用し、さらに反映を行うためにDBサーバーの再起動を実行します。
    以上でマスターユーザー(およびお客様が追加で作成したユーザー)のタイムゾーンがMySQL接続時にAsia/Tokyoに設定されるようになります。
     

    なお、タイムゾーンを変更後、MySQLの接続にはストアドプロシージャの実行権限が必要となります。

    マスターユーザーでログインし、下記のような権限付与を行ってください。
     

    GRANT EXECUTE ON shared.* to ユーザー名@'%' identified by 'パスワード';