標籤:老大叫我改主要資料庫(mysql)的時間!!!--utc問題
由於我公司另外一個營運小夥伴裝系統的時候,勾選了UTC這個東東。(會導致慢八個小時的時間誤差)結果才有了這一次逗比的經曆。
1、系統時間慢八個小時,我發現不對勁後,就改回來了,可參考我的另外一篇部落格。
2、資料庫慢了八個小時,當時並沒有意識到這個問題。
突然在做實驗,老大喊我,說MySQL時間不對勁,讓我幫忙解決一下。啥?不會吧,當時首先是這個反正,去看看後,果然時間不對,和本地時間比較一下,相差八個小時。我頓時反應就是,又是那UTC惹的禍。好吧,排查吧,畢竟先解決問題才是硬道理啊。
瞭解:
5.10.8. MySQL伺服器時區支援
MySQL伺服器有幾個時區設定:
· 系統時區。伺服器啟動時便試圖確定主機的時區,用它來設定system_time_zone系統變數。
· 伺服器當前的時區。全域系統變數time_zone表示伺服器當前使用的時區。初使值為‘SYSTEM‘,說明伺服器時區與系統時區相同。可以用--default-time-zone=timezone選項顯式指定初使值。如果你有SUPER 許可權,可以用下面的語句在運行時設定全域變數值:
·mysql> SET GLOBAL time_zone = timezone;
· 每個串連的時區。每個用戶端串連有自己的時區設定,用會話time_zone變數給出。其初使值與全域變數time_zone相同,但可以用下面的語句重設:
·mysql> SET time_zone = timezone;
可以用下面的方法查詢當前的全域變數值和每個串連的時區
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM | SYSTEM |
+--------------------+---------------------+
1 row in set (0.00 sec)
mysql>
解決方案;
1、臨時解決方案
查看當前資料庫時間
mysql> select CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 08:53:05 |
+-----------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2016-01-31 08:53:08 |
+---------------------+
1 row in set (0.00 sec)
mysql>
修改時區:
mysql> SET time_zone = ‘+8:00‘; # 此為北京時,我們所在東8區
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
這種方法好像只能在終端上使用,退出終端後時間又會變成原來的。
2、永久解決方案
vim /etc/my.cnf
[mysqld]
default-time_zone = ‘+8:00‘
重啟mysql服務。
/etc/init.d/mysqld restart
注意:我的環境沒報錯,因為我自己搭建的有類比環境,建議先在類比環境操作,避免版本,環境帶來不必要的錯誤和損失。
其他問題:
資料庫如果有主從結構,重啟資料庫會導致主從不同步。
個人建議的方法:
1、先停止slave (stop slave;)然後先修改slave的時區(很不幸,系統不是自己裝的),等到伺服器重啟後,查看slave同步binlog的位置,然後修改Master的時區,重啟後查看當前master的位置,重新授權,salve重新學習(可從slave重啟後查看的位置學習),最後再start slave;不出意外,這樣是可行的,畢竟我是這樣操作。
2、如果不行失敗,那就等master和slave時區都改好後,查看master當前位置,然後slave匯入最新資料庫,然後重新學習。
3、我嘗試過slave不匯入最新資料,從一開始從master的binglog位置學習,但是實驗報錯了。後來有從新匯入最新資料,然後學習的。(具體為什麼失敗,並不清楚,網上關於重啟資料庫,主從不同步的原因有很多。)
個人總結:
1、涉及到資料庫的問題,最好先在實驗環境類比真實環境,操作無誤再在生產環境執行,避免不必要的錯誤。如果問題比較大,記得先做好備份,備份才是王道。
2、遇到問題,先冷靜,仔細排查。不要抱怨,先解決問題,再建議。
3、不要忽略一些不必要的問題。一個小小的UTC,居然帶來了這麼多的小彎路。
上面是個人在生產環境碰到的一些小問題,分享給大家,希望和大家互相分享,共同進步。
QQ:1145507435
郵箱:[email protected]
本文出自 “?唯一!” 部落格,請務必保留此出處http://renzhiyuan.blog.51cto.com/10433137/1782399
老大叫我改主要資料庫(MySQL)的時間!!!--UTC問題