日本向けディストリビューション以外の環境では、おおくの場合タイムゾーンがUTC(グリニッジ標準時)に設定されており、JST(日本標準時)と9時間ずれていることがあります。
(現在の時間帯設定は、シェルのdate
コマンドで確認できます)
Linuxのタイムゾーンを変更するには、システム設定を変更する必要があります。
Debianのタイムゾーン設定
/etc/localtime
を参照して設定されるため、zoneinfoから引き写してdpkg-reconfigure
します。
以下のコマンドで非対話的にJSTに設定可能です。
# ln -fs /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# dpkg-reconfigure -f noninteractive tzdata
Current default time zone: 'Asia/Tokyo'
Local time is now: Wed May 9 10:27:46 JST 2018.
Universal Time is now: Wed May 9 01:27:46 UTC 2018.
MySQLのタイムゾーン設定
MySQLのタイムゾーンはOSの設定を参照する方式と、MySQL自体でtime_zone設定する方式の両方とれます。
以下のようなコマンドで現在の設定を調査できます。
mysql> SELECT now();
+---------------------+
| now() |
+---------------------+
| 2018-05-09 13:26:13 |
+---------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE '%time_zone%';
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | UTC |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
この例では、SYSTEM設定を参照した結果、UTCになっておりnow()もグリニッジ時刻を返します。
OSのタイムゾーンを変更した場合、system_time_zone
の値は自動では変更されず、MySQLインスタンスの再起動が必要です。
また、read only設定のためSET GLOBAL system_time_zone
はできません。
OS設定ではなく、MySQLに独立したタイムゾーン設定をしたい場合、あらかじめ付属ツールを利用してmysqlテーブルにタイムゾーンのカタログを作成しておく必要があります。
# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
タイムゾーンのカタログを生成できたら、my.cnfでタイムゾーン指定できます。
[mysqld]
default-time-zone = 'Asia/Tokyo'
⁋ 2018/05/09↻ 2024/12/18
中馬崇尋
Chuma Takahiro
Chuma Takahiro