MySQLで作業をした際にログを見ると、時間がおかしいことに気付きました。
MySQLを起動して、
$sudo -u _mysql mysql.server start Starting MySQL .... SUCCESS!
OSのdateコマンドの結果と
$date 2016年 3月31日 木曜日 00時43分31秒 JST
MySQLのログの時間が
#/usr/local/var/mysql/Air.local.err … 2016-03-30T15:43:24.678972Z 0 [Note] Event Scheduler: Loaded 0 events 2016-03-30T15:43:24.679586Z 0 [Note] /usr/local/Cellar/mysql/5.7.11/bin/mysqld: ready for connections. Version: '5.7.11-log' socket: '/tmp/mysql.sock' port: 3306 Homebrew
違う。
原因はlog_timestamps
MySQLのログタイムスタンプは「log_timestamps」の値で設定されるのですが、これの初期値がUTCなのです。
この値をSYSTEMにすると、OS時間を採用してくれます。
#/etc/my.cnf
[mysqld]
log_timestamps=SYSTEM
上記の設定をしてから再度MySQLを起動します。
$ sudo -u _mysql mysql.server start Starting MySQL ... SUCCESS!
OSのdateの結果と
$ date 2016年 3月31日 木曜日 00時52分52秒 JST
MySQLのログの時間が
#/usr/local/var/mysql/Air.local.err … 2016-03-31T00:51:57.034824+09:00 0 [Note] Event Scheduler: Loaded 0 events 2016-03-31T00:51:57.035341+09:00 0 [Note] /usr/local/Cellar/mysql/5.7.11/bin/mysqld: ready for connections. Version: '5.7.11-log' socket: '/tmp/mysql.sock' port: 3306 Homebrew
一致した!
その他時間に関わるパラメータ
ついでにMySQLの時間に関わるパラメータをまとめておきます。
time_zone
現在のmysqlサーバで利用されているタイムゾーン。
テーブル操作等で利用される時刻情報はこの値が基になります。
初期値は「SYSTEM」であり、この値は前述のsystem_time_zoneと同値であることを示します。
/* この場合はtime_zoneも「JST」 */ mysql> show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | JST | | time_zone | SYSTEM | +------------------+--------+ /* これは日本時刻になる */ mysql> select NOW(); +---------------------+ | NOW() | +---------------------+ | 2016-03-28 23:31:42 | +---------------------+ /* time_zoneをUTCに変えると */ mysql> set session time_zone=UTC; mysql> show variables like '%time_zone%'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | system_time_zone | JST | | time_zone | UTC | +------------------+-------+ /* UTC時刻になる */ mysql> select NOW(); +---------------------+ | NOW() | +---------------------+ | 2016-03-28 14:34:13 | +---------------------+ 1 row in set (0.00 sec)
lc_time_names
曜日の表示に使われる言語を設定する。
初期値は「en_US」。
mysql> show variables like 'lc_time_names'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | lc_time_names | en_US | +---------------+-------+ mysql> select DAYNAME(NOW()); +----------------+ | DAYNAME(NOW()) | +----------------+ | Monday | +----------------+ /* 日本語を設定してみる */ mysql> set session lc_time_names=ja_JP; mysql> show variables like 'lc_time_names'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | lc_time_names | ja_JP | +---------------+-------+ mysql> select DAYNAME(NOW()); +----------------+ | DAYNAME(NOW()) | +----------------+ | 月曜日 | +----------------+
参考サイトはこちらです。
MySQL :: MySQL 5.6 リファレンスマニュアル :: 10.6 MySQL Server でのタイムゾーンのサポート
MySQLのタイムゾーン - @tmtms のメモ
- 作者: 西沢夢路
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2012/04/27
- メディア: 単行本
- 購入: 2人 クリック: 10回
- この商品を含むブログ (9件) を見る
- 作者: Baron Schwartz,Peter Zaitsev,Vadim Tkachenko,菊池研自,株式会社クイープ
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/11/25
- メディア: 大型本
- この商品を含むブログ (7件) を見る
現場で使える MySQL (DB Magazine SELECTION)
- 作者: 松信嘉範
- 出版社/メーカー: 翔泳社
- 発売日: 2006/03/17
- メディア: 単行本
- 購入: 9人 クリック: 103回
- この商品を含むブログ (45件) を見る