昨天开发人员提出,在使用mysql数据库时,查看到的数据库时间有问题,与本地时间不一致;
一:查看问题
1.在数据库:查看时间;
mysql> mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2017-06-15 15:10:15 |
+---------------------+
1 row in set (0.00 sec)
2.在linux服务器: 查看时间:
[[email protected] ~]# date
Wed Jun 15 15:10:11 EDT 2017
备注:
EDT:指美国东部夏令时间,波士顿、纽约市、华盛顿哥伦比亚特区,都在这个时区内,跟北京时 间有12小时的时差,晚12小时
CST:可以指下面两种:
1.美国中部标准时间(西六区,-6:00),中国是东八区(+8:00),北京时间比美国中部标准时间 早14个小时。3:45 PM CST 是北京时间凌晨1:45。
2.澳大利亚标准时间(+10:30),中国是东八区(+8:00),北京时间比澳大利亚标准时间晚2个半 小时。3:45 PM CST 是北京时间下午上午5:45。
二:现在要改成北京时间的时区CST,并且在数据库中的时间也要与服务器的时间显示一致,修改如下:
1.
将edt时区改为ect时区:
修改前:
[[email protected] ~]# date
Wed Jun 15 15:11:06 EDT 2017
修改:
[[email protected] ~]# mv /etc/localtime /etc/localtime.bak
[[email protected] ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改后:
[[email protected] ~]# date
Thu Jun 15 15:16:09 CST 2017
3.
linux时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间。
两者经常不一致;
解决:
# clock --systohc # 同步系统时间到硬件时间
# clcok -w # 强制把系统时间写入CMOS
查看效果:
服务器:
[[email protected] ~]# date
Thu Jun 15 15:23:26 CST 2017
mysql数据库:
mysql> select date_format(now(),"%Y-%m-%d %H:%i:%s");
+----------------------------------------+
| date_format(now(),"%Y-%m-%d %H:%i:%s") |
+----------------------------------------+
| 2017-06-15 15:23:29 |
+----------------------------------------+
1 row in set (0.00 sec)
mysql数据库与linux服务器时间一致,且为CST时区。任务完成!