双十一马上到了,一堆的事情,今天登录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 完毕!