寫在前面
使用 MySQL 的過程中,會碰到這么一個問題:看錯誤日志、慢查詢日志的時候,時間總是和本地時間對不上,差了 8 個小時,這樣分析起來就相對麻煩了一些。
新改進
為了方便對於不知道是什么原因導致日志時間差異,以及不知道如何解決的用戶,MySQL 在 5.7.2 版本中新增了一個參數——log_timestamps
,用來解決此問題。
看一下官檔是如何說的:
This variable was added in MySQL 5.7.2. Before 5.7.2, timestamps in log messages were written using the local system time zone by default, not UTC. If you want the previous log message time zone default, set log_timestamps=SYSTEM.
log_timestamps 這個參數主要是控制 error log、slow_log、genera log,等等記錄日志的顯示時間參數,但不會影響 general log 和 slow log 寫到表 (mysql.general_log, mysql.slow_log) 中的顯示時間。在查詢行的時候,可以使用 CONVERT_TZ() 函數,或者設置會話級別的系統變量 time_zone 來轉換成所需要的時區。
該參數全局有效,可以被設置的值有:UTC
和 SYSTEM
,默認使用 UTC
。它還支持動態設置,不過建議大家在配置文件中就寫上,以免重啟之后造成不必要的麻煩。
解決
說了這么多,大家應該也知道如何去解決上面這個問題了。
log_timestamps 參數默認使用 UTC 時區,這樣會使得日志中記錄的時間比中國這邊的慢了 8 個小時,導致查看日志不方便。修改為 SYSTEM 就能解決問題。
mysql> SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| log_timestamps | UTC |
+----------------+--------+
mysql> SET GLOBAL log_timestamps = SYSTEM;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GLOBAL VARIABLES LIKE 'log_timestamps';
+----------------+--------+
| Variable_name | Value |
+----------------+--------+
| log_timestamps | SYSTEM |
+----------------+--------+
參考:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_log_timestamps