MySQLエンジンでタイムゾーンをUTCから他のものに変更することは可能ですか?
ニフクラRDBのシステムユーザー(rdbadmin)が時刻に関する整合性を保つために、MySQLエンジンのDBサーバーのタイムゾーンはUTCに設定されており、これを変更することはできません。
ただし、下記の手順を実施することで、お客様に発行されたマスターユーザーや、お客様が追加で作成したユーザーにのみ特定のタイムゾーンを適用することが可能です。
ストアドプロシージャを作成する
rdbadmin以外のユーザーが接続している場合にタイムゾーンを他のものに変更するストアドプロシージャを作成します。
上記ストアドプロシージャ呼び出しをDBパラメーターグループのinit_connectに設定する。
init_connectパラメーターにストアドプロシージャ呼び出しを設定するとMySQLに接続するたびにストアドプロシージャが実行されるようになります。
下記に具体的な手順を説明します。
ここではタイムゾーンをUTCからAsia/Tokyoに変更してみます。
ストアドプロシージャの作成
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 'パスワード';
ストアドプロシージャをinit_connectパラメーターに設定
まず、新規にDBパラメーターグループを作成し、init_connectパラメーターに下記を設定します。
CALL shared.store_time_zone
次に、タイムゾーンを変更したいDBサーバーに上記DBパラメーターグループを適用し、さらに反映を行うためにDBサーバーの再起動を実行します。
以上でマスターユーザー(およびお客様が追加で作成したユーザー)のタイムゾーンがMySQL接続時にAsia/Tokyoに設定されるようになります。


