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

  三、设置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(我这边已经改过了所以看不出来效果)

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

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

    

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

    

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

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

    进入mysql:mysql -uroot -p

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

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

注意:

    如果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?有知道的小伙伴欢迎探讨。

        

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值