web-dev-qa-db-ja.com

MySQLはNOW()とは異なる時間をログに記録します

MySQLサーバーは、システムまたはmysql自体とは異なる時間でエントリをログに記録します。

mysql> select @@global.time_zone;
+--------------------+
| @@global.time_zone |
+--------------------+
| SYSTEM             |
+--------------------+
mysql> select NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2016-02-24 10:47:30 |
+---------------------+

# /var/log/mysql/mysql_queries.log
2016-02-24T18:47:11.191126Z    2 Connect        root@localhost on  using Socket
2016-02-24T18:47:11.191421Z    2 Query  select @@version_comment limit 1
2016-02-24T18:47:16.769493Z    2 Query  select @@global.time_zone
2016-02-24T18:47:30.503214Z    2 Query  select NOW()

タイムスタンプはログと同期しているようです:

mysql> show variables;
timestamp               | 1456339753.062182 # 18:47
log_timestamps          | UTC

解決策は非常に簡単でした。変数を調べて、関連するものを見つけてください。

log_timestamps                   | UTC

だから私はそれを「システム」に変更しました:

mysql> SET GLOBAL  log_timestamps  = 'SYSTEM';

# /var/log/mysql/mysql_queries.log
2016-02-24T18:54:23.837289Z    2 Query  SET GLOBAL  log_timestamps  = 'SYSTEM'
2016-02-24T10:54:25.949232-08:00    2 Query     show variables

ログの時間は、必要に応じて18:54から10:54に切り替わりました。

MySQLドキュメントから

  • log_timestamps

この変数は、エラーログメッセージのタイムスタンプタイムゾーン、および書き込まれた一般クエリログとスロークエリログメッセージのを制御しますファイルへ。テーブル(mysql.general_log、mysql.slow_log)に書き込まれる一般的なクエリログおよび低速クエリログメッセージのタイムゾーンには影響しません。これらのテーブルから取得された行は、CONVERT_TZ()を使用するか、セッションtime_zoneシステム変数を設定することにより、ローカルシステムのタイムゾーンから任意のタイムゾーンに変換できます。

Mysqlの再起動または再起動後も変更を永続的に維持する場合は、これをmy.cnfファイルに入れます。

log_timestamps   = 'SYSTEM' 
1
pan_r