寻觅生命中的那一片浅草......

每日存档 十一月 7th, 2009

mysql时区的修正

昨天暴风的技术人员找我要核对充值数据,说是时间对不上;我检查了之后发现二服的数据库的时间有问题,我使用from_unixtime()这个方法查看1257868800这个时间戳顯示的不是2009-11-11,而是2009-11-10 11:00:00,时间差了十三个小时。而后台显示那里是用from_unixtime()这个方法来显示时间格式的,所以所有的订单数据都对不上他们那边系统记录的时间。据说是因为装MYSQL的时候的时间不对,导致后来MYSQL的时区就不对了,后来系统虽然把时区改过来了,但是MYSQL的时区还是在装机的时候的那个时区,显示就错误了。

知道了原因之后就能解决了,上网搜索了一下,找到了解决的方法。现在把我的解决方式记录一下。

先检查MYSQL的时区,打开一台MYSQL时区正确的机器,然后打开有问题的机器,确认是时区错误。

先打开时区正确的机器:进入MYSQL,在命令行输入:mysql -uroot -p****(root的密码),进去之后输入show variables like ‘%time_zone%’;然后回车,得到如下的显示:

+——————+——–+
| Variable_name    | Value  |
+——————+——–+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+——————+——–+
2 rows in set (0.00 sec)

然后再输入select from_unixtime(1257868800);回车,得到如下结果:

+—————————+
| from_unixtime(1257868800) |
+—————————+
| 2009-11-11 00:00:00       |
+—————————+
1 row in set (0.00 sec)

好了,再去有问题有机器上执行相同的操作发现执行show variables like ‘%time_zone%’;得到的结果是:

+——————+——–+
| Variable_name    | Value  |
+——————+——–+
| system_time_zone | EDT    |
| time_zone        | SYSTEM |
+——————+——–+
2 rows in set (0.01 sec)

执行select from_unixtime(1257868800);得到的结果是:

+—————————+
| from_unixtime(1257868800) |
+—————————+
| 2009-11-10 11:00:00       |
+—————————+
1 row in set (0.00 sec)

时间差了十三个小时。怎么样把时区调回我们想要的呢?虽然网上说可以在命令行下执行set time_zone = ‘+8:00′;之后就设置了时区,但是这样的操作没有对全司有效。只是在执行这个之后再在命令行下执行其它的操作可以得到正确的数据。但是在phpmyadmin下得到的结果还是错的。所以要修改MYSQL的配置文件来达到修改全局变量的目的。

先去找到mysql的配置文件my.cnf,一般在/etc/my.cnf下面,可以cd /etc 然后find my.cnf找找,看能不能找到。找到之后就修改它,用VI打开:vi /etc/my.cnf,打开之后查找[mysqld],在VI输入“/”然后输入[mysqld],就定位到[mysqld]所在的位置,在它的下面加上default-time-zone = ‘+8:00′这一行,然后保存退出,重新启动MYSQL,使时区生效。这个时候再去MYSQL下查看刚才的那两条命令,就会发现时区都设置正确了。

到此,时区不对的问题就解决了。

转载自:http://www.codeo4.cn/?p=318

2009年十一月
« 10月   12月 »
 1
2345678
9101112131415
16171819202122
23242526272829
30