mysql修改默认时区

进行mysql操作时,发现 gmt_modified 字段 ON UPDATE CURRENT_TIMESTAMP 时,自动取值的时间要晚于系统时间 8 个小时。 一看便知是时区的问题。

1. 查看 Mysql 系统时区

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)

UTC 是协调世界时(Universal Time Coordinated)英文缩写, 北京时间比UTC时间早8小时。

CST可以同时代表如下 4 个不同的时区:

Central Standard Time (USA) UT-6:00

Central Standard Time (Australia) UT+9:30

China Standard Time UT+8:00

Cuba Standard Time UT-4:00

因此只需要把Mysql的时区改成 China Standard Time UT+8:00 即可

2. 修改时区

2.1普通安装方式(未验证)

vim /etc/mysql/my.cnf

# 文件末尾添加时区
default-time-zone = '+08:00'

# 重启服务即可
servicer mysql restart

2.2 docker安装方式

mysql的docker官方镜像默认没有使用 CST 时区,所以会造成时间不准的问题,

修复办法:

docker exec -it mysql_container bash
echo "Asia/Shanghai" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata

可以看到类似如下输出:
Current default time zone: 'Asia/Shanghai'
Local time is now:      Wed Oct 24 19:44:01 CST 2018.
Universal Time is now:  Wed Oct 24 11:44:01 UTC 2018.  

exit

docker restart mysql_container

重启后就会发现 时间恢复正常了

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.01 sec)

results matching ""

    No results matching ""