最近發現MySQL用timestamp自動設定的現在時間CURRENT_TIMESTAMP,會慢八個小時,紀錄一下怎麼解的:
解決MySQL用timestamp自動設定的現在時間,會慢八個小時的問題。
暫時性解法:
mysql > set global time_zone='+8:00'; // UTC+8為台灣區的時間
設定這個之後,不管是未來新增的資料還是以前就存在的,timestamp都會更正為正確的。
注意: 此方法是暫時性的,重啟後就會失效!
永久性解法:
主要是要修改mysql的設定檔,以下以laradock為例:
在Laradock/mysql/my.cnf檔案最下面加入:
default-time_zone = '+8:00'
若改了之後發現無效,需把mysql資料刪掉重啟一次! (看設定laradock映射到host的mysql data路徑在哪,這個設定在: Laradock/.env中的DATA_PATH_HOST)
cd到該路徑後,刪掉整個mysql資料夾: $ rm -rf mysql
注意: 刪掉mysql資料夾前記得把DB備份,以免貴重資料遺失!
之後laradock重開時區設定就不會再失效了!
另外我也順便改了Linux時區與MySQL log時區。
更改 CentOS Linux 系統時區:
$ timedatectl set-timezone Asia/Taipei
解決MySQL寫入log的時區問題:
在my.cnf中加入 log_timestamps=SYSTEM
重啟mysql
Note: centos7 my.cnf預設在/etc/my.cnf 改完記得restart db.