MySQL 时区问题

解决mysql数据库时间时区问题的四种方法:

  一、连接时加上时区设置参数(但是我在测试时删除和增加这个设置没影响,但是还是习惯性加上,猜想可能是高版本mysql已经没有这个问题,我是用的mysql 8.0.18):

  &serverTimezone=GMT%2B8

  二、设置Linux时区,如果mysql是直接安装在Linux服务器上,查看一下Linux时间,如果不对会有影响:

    命令:

         查看时间及时区:date -R

         修改时区为东八区:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

MySQL 时区问题_第1张图片

  三、设置docker时区,如果mysql是启动的docker里面的镜像,需要查看docker的时区是否正确,如果不对就需要修改:

    命令:

        查看docker中正在运行的镜像:docker ps

        进入mysql进行:docker exec -it xxx bash(xxx:镜像id)

        查看时间及时区:date -R

        修改docker容器时区为东八区:ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime(我这边已经改过了所以看不出来效果)

MySQL 时区问题_第2张图片

  四、修改mysqld.cnf文件(如果mysql装在linux该文件路径为:/etc/mysql/mysql.conf.d/mysqld.cnf,如果是在docker运行的镜像一般都有挂载的外部文件,我们是用到了docer compose,直接去对应的yaml文件就可以找文件路径):

    yaml文件内容(冒号前面的是挂载的linux,后面的是docker容器中对应的路径):

    MySQL 时区问题_第3张图片

    修改mysqld.cnf文件,修改linux目录里面的就行,增加 default-time_zone = '+8:00' ,然后重启。

    MySQL 时区问题_第4张图片

  一般来说就可以了, 如果还是不行就进入docker里面的mysql设置一下时区就可以了,这个不知道是什么原因,因为设置的应该是当前会话的时区,不是全局的,但是不知道为什么,设置完后远程连接也ok了,总之我是这样解决的。

    进入docker容器中的mysql镜像:docker exec -it 72dfc10fbd89 bash

    进入mysql:mysql -uroot -p

    查看当前时区:show variables like "%time_zone"; (我这边已经改过,已经是显示的正确时区)

    设置时区:set time_zone = '+8:00';

MySQL 时区问题_第5张图片

注意:

    如果linux上退出mysql再登录查看时区还是对的,但是navicat不行,需要把navicat关掉重启一下,可能是第一次连接的时候就已经记录了时区。

补充命令:

    查看docker compose正在运行的服务:docker-compose ps(如果有多个docker-compose.yaml文件,需要进入对应的目录)

    停止docker compose中正在运行的服务:docker-compose stop xxx (xxx:服务名,可在docker-compose.yaml文件中查看)

    启动docker compose中正在运行的服务:docker-compose start xxx (xxx:服务名)

    登录mysql后查看当前时间:SELECT CURTIME();

2019-12-9 更新:今天服务器断电重启后又出现时区问题了,怎么设置都不生效,最后设置为 default-time_zone = 'HongKong' 后重启mysql服务解决问题,然后再改成 default-time_zone = '+8:00' 后重启mysql服务,发现还是正常的,不知道什么原因怀疑是mysql 8的bug?有知道的小伙伴欢迎探讨。

        

你可能感兴趣的:(mysql)