同事与第三方做联调,反映测试据库时间不正确,检查后发现是Linux系统时间没同步。第一反映是去做时间同步(可能大多数人都是这么想的)。然而这个同步几乎耽误了我一下午的时间。
简单记录操作步骤:
1. 用date命令查看当前时间,检查操作系统时间是否正确。
2. 把时间同步命令写到/etc/crontab中
3. 与时间同步服务器做同步 /usr/sbin/ntpdate 192.168.19.10;
3. 写入硬件时钟 /sbin/hwclock -w
4. 用date命令检查时间是否同步
5. 检查数据库中的时间已经正确
6. 退出客户端
一会同事想知道时间同步前与同步后相差多少秒,然后去修改数据。
1. 由于用ntpdate做时间同步时并没有记录日志,所以在/var/log/message中没看到时间同步的记录。
查看/var/log/message 只有这样一条记录: Nov 26 14:05:26 Test-DB01 kernel: hpet1: lost 2 rtc interrupts |
2. 由于已经从客户端退出,客户端也没有开启日志功能,所以无法通过执行命令时产生的日志看到当时同步的记录。
3. 通过linux的history来看执行的历史命令,只能看到执行的命令,但看不到执行的时间。
4. 想通过时间同步服务器查询服务器的同步记录,但时间同步服务器在总部,我们也无法看到。
实在想不到其他的办法了,如果谁有其它方法请不吝赐教。只能用个近似的时间了。
1.由于修改过/etc/crontab,可以看到/etc/crontab最后修改时间。这个时间跟手工执行ntpdate的时间应该不差几秒。
2.由于用hwclock写入过硬件时钟,所以在/etc/adjtime下会有记录。
/etc/adjtime 内容如下:
-0.002542 1385445926 0.000000 1385445926 UTC |
mysql> select FROM_UNIXTIME(1385445926) FROM DUAL; +---------------------------+ | FROM_UNIXTIME(1385445926) | +---------------------------+ | 2013-11-26 14:05:26 | +---------------------------+ |
用这个时间减去/etc/crontab的修改时间,大概可以得出服务器与时间同步服务器之间相差的时间了。
总结:
1.如果ntpdate 同步时加了 -s 写日志参数则在/var/log/message中会有这样的记录
Nov 26 17:28:51 Test-DB01 ntpdate[10764]: adjust time server 192.168.19.10 offset 0.039235 sec
2. 如果在.bash_profile 中记录命令的时间 export HISTTIMEFORMAT="%F %T `whoami` "
则可以看到命令的具体执行时间。根据命令执行的时间差也可以算出同步前后的时间差。
3. 如果在客户端启用记录日志的功能
如果客户端启用了记录日志功能,则什么麻烦都没有了。
可是没有那么多的如果。
不管是生产还是测试,都尽量保持良好的记录操作日志的习惯。让一切操作有迹可寻。