mysql时区问题(设置mysql的系统时区为东八区,docker配置mysql的时区问题)

mysql时区问题(设置mysql的系统时区为东八区,docker配置mysql的时区问题)

问题描述

服务器上安装的mysql,发现存储时间类型的数据的时间值与系统时间总是不对应,相差8个小时。问题的根源是mysql的时区设置不匹配。

解决——永久设置mysql系统的时区

1.查询mysql当前时区

在黑窗口或者MySQL的图形化管理工具输入如下命令:

show variables like "%time_zone%";

发现此时mysql时区为UTC。
在这里插入图片描述

2.设置mysql的时区为东八区
set global time_zone = '+8:00';
set time_zone = '+8:00';
flush privileges;
3.查询当前mysql系统的时区
show variables like "%time_zone%";

在这里插入图片描述

问题

虽然说是永久设置mysql的时区,但是我的mysql是用docker部署的容器,每次重启mysql,即docker restart mysql,时区还是会回复到最初的状态。需要重新设置mysql的时区(推测问题应该出现在docker上)。

解决

在mysql容器启动时将/etc/mysql/my.cnf挂载到宿主机,在宿主机的文件中进行配置
然后在mysqld下边的配置中添加一行:default-time_zone = '+8:00'
docker restart mysql重启mysql即可

可以进入mysql的容器docker exec -it mysql bash,查看/etc/mysql/my.cnf的配置cat /etc/mysql/my.cnf,复制其中的内容进挂载的文件(防止出现配置上的遗漏)
我的配置:

[mysqld]
default-time-zone = '+08:00'

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

我的mysql容器运行命令:docker run -p 3306:3306 --name mysql -v /data/mysql/conf:/etc/mysql/conf.d -v /data/mysql/logs:/logs -v /data/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=****** -d mysql:5.7

备注

最好可以在连接mysql的时候,在url中设置时区,可以设置serverTimezone=Asia/Shanghai,即便mysql的时区不对应,但查询出来的数据也会按照东八区的计算。

    url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true

猜你喜欢

转载自blog.csdn.net/qq_42937522/article/details/106207087