雙十一馬上到了,一堆的事情,今天登錄mysql數據庫服務器的時候突然發現服務器時間戳不對,比北京時間快了幾分鍾,我的天。。。隨后檢查了其他的幾台數據庫服務器發現同樣都存在不同的偏差,最小的比北京時間快幾秒,最大的長達8分鍾,感覺整個人都不舒服了。。。服務器時間戳沒有同步會導致什么問題呢,舉個最簡單的例子你的程序代碼里面用now()來獲取時間,比如一個訂單,你最終會發現訂單的處理時間竟然比訂單的創建時間來到早,馬爸爸和東哥要是知道了還不得發飆啊!!!
隨后要做的事情就是改服務器時間了,改服務器時間本身是個很簡單的事情,可是要考慮到應用數據在隨時寫入,兩台主從服務器還在實時同步,所以大概列了一個詳細的計划和步驟,大體思路是:停應用 停數據庫(先備后主) 改時間 啟數據庫(先主后備) 啟應用
備忘下:
1 通知系統上下游,以及相關業務,系統某個時間點(一般在凌晨)停止服務
2 關閉服務器入口,比如nginx/F5等,避免新的訂單進入
3 關閉定時任務,避免任務繼續在跑
4 關閉應用
5 關閉MHA(MySQL高可用方案)
6 關閉MySQL從庫
a.先查看當前的主從同步狀態show slave status\G;看是否雙yes
b.執行stop slave
c.停止從庫服務mysqladmin shutdown -u用戶名 -p密碼
d.查看是否還有mysql的進程ps -ef | grep mysql
d.如果部署了多個實例,那每個實例都要按照以上步驟來操作
7 關閉MySQL主庫
a.停止主庫服務mysqladmin shutdown -u用戶名 -p密碼
b.查看是否還有mysql的進程ps -ef | grep mysql
8 修改數據庫服務器時間
9 啟動MySQL主庫
a.啟動主庫服務mysqladmin start -u用戶名 -p密碼
b.查看mysql的進程ps -ef | grep mysql
10 啟動MySQL從庫
a.啟動從庫服務mysqladmin start -u用戶名 -p密碼
b.啟動復制start slave;
c.檢查同步狀態show slave status\G;是否雙yes
d.查看mysql的進程ps -ef | grep mysql
11 啟動MHA
12 啟動應用
13 啟動定時器
14 啟動外部入口
15 完畢!