现象
- 背景
两台主机:本地是windows系统,服务器是linux系统。
两个项目:本地和服务器上分别部署了一个项目。
一个数据库:数据库mysql,装在服务器上。两个主机上的项目连的是同一个数据库。
- 现象
同一个页面在两个项目中的展示时间不一致:
本地:
服务器:
数据表中数据:
本地项目连服务器数据库,页面显示时间与数据库一致。
服务器项目连服务器数据库,页面显示时间比数据库快16小时。
解决办法
- 修改服务器时间和时区,与北京时间一致。
1.查看服务器时间和时间:date -R
[root@host231 ~]# date -R
Tue, 06 Feb 2018 12:35:48 -0800
-0800表示西八区,是美国旧金山所在的时区,北京是东八区(+0800)
2.修改时区:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@host231 ~]# date -R
Tue, 06 Feb 2018 12:35:48 -0800
[root@host231 ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp: overwrite ‘/etc/localtime’? y
[root@host231 ~]# date -R
Wed, 07 Feb 2018 04:36:11 +0800
3.修改系统时间:date -s “YYYY-MM-DD hh:mm:ss”
[root@host231 ~]# date -R
Wed, 07 Feb 2018 04:46:21 +0800
[root@host231 ~]# date -s "20180206 16:49:00"
Tue Feb 6 16:49:00 CST 2018
[root@host231 ~]# date -R
Tue, 06 Feb 2018 16:49:02 +0800
- 修改数据库时区,与北京时区一致。
MySQL 时区默认是服务器的时区。可以通过以下命令查看
mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | PST |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)
可以通过修改my.cnf在 [mysqld] 之下加default-time-zone=timezone来修改时区。如:default-time-zone = ‘+8:00’改了记得重启msyql。
注意一定要在 [mysqld] 之下加 ,否则会出现 unknown variable ‘default-time-zone=+8:00’
另外,也可以通过命令 set time_zone = timezone比如北京时间(GMT+0800)set time_zone = ‘+8:00’;
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-02-06 00:49:16 |
+---------------------+
1 row in set (0.00 sec)
mysql> set time_zone = '+8:00';
Query OK, 0 rows affected (0.02 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2018-02-06 16:50:57 |
+---------------------+
1 row in set (0.00 sec)
然后重启mysql
至此,数据表中新增的数据再本地和服务器中系统展示的时间一致了。
虽然之前新增的的数据,在不同系统中展示还是不一样。