Docker下的MySQL服务器时区不正确的问题解决

2022-06-07 944点热度 0人点赞 0条评论

最近在使用Docker下的MySQL的时候,遇到一个问题,就是发现它的时区不对(因为之前都是习惯了+800的),在做一个SQL查询的时候,发现时区并不是东八区(CST即China Standard Time),例如:

select * from t_test where create_date>now()

本来类似这样的记录是能查出来的,但是现在却没有,进一步调试,发现select now()出来的时间比北京时间少了8个小时。

如何在Docker下安装MySQL的文章,请查看:https://blog.terrynow.com/2022/04/19/docker-install-mysql-server-simple-steps-and-some-common-operations-remarks/

问题解决

我们进去SQL看下,MySQL的时区,显示的是UTC,而不是CST:

show variables like '%time_zone%'

+------------------+--------+ 
| Variable_name | Value | 
+------------------+--------+ 
| system_time_zone | UTC | 
| time_zone | SYSTEM | 
+------------------+--------+ 
2 rows in set (0.00 sec)

以上问题很容易看出来是时区问题,原因是docker容器里的的时间是没有时区的,

解决方案1

我们通过给docker容器的时间修改时区来解决

# containerId是容器ID,通过docker ps可查看到
# 进入容器命令行
docker exec -it <containerId> bash

# 查看时间(发现时间比北京时间满了8个小时)
date
# Tue Jun 7 00:00:48 UTC 2022 (我查询的时候是8点)

# 修改时区
ln -sf /usr/share/zoneinfo/Asia/Singapore /etc/localtime

# 退出容器命令行
exit

# 重启mysql容器
docker restart <containerId>

现在再使用SQL指令查下select now()应该就正常了,再来确认下:

show variables like '%time_zone%';

+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | +08 |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)

select now();
now()
2022-06-07 08:08:06

解决方案2

修改mysql配置文件,指定时区

# containerId是容器ID,通过docker ps可查看到 
# 进入容器命令行 
docker exec -it <containerId> bash

# vi /etc/my.cnf
# [mysqld] 下增加如下一行:
default-time-zone='+08:00'

# 退出容器命令行 
exit

# 重启mysql容器 
docker restart <containerId>

 

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论