解决MySQL时区日期时差8个小时的问题

 更新时间:2023年01月04日 11:06:44   作者:拄杖忙学轻声码  
本文主要介绍了解决MySQL时区日期时差8个小时的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

场景:

我们在mysql客户端查询 now() 系统当前日期时间,会发现得到的结果比系统实际日期时间慢8个小时左右,这是由于不同的时区导致的

解决:

1、在 mysql 的服务端的 my.conf 文件中 [mysqld] 节点下设置时区参数

default-time-zone=Asia/Shanghai

2、如果 mysql 的版本是 5.7 配置如下参数

default-time-zone = '+8:00'

3、如果 mysql 服务是由 docker 创建的容器,需要查看 mysql 容器的系统日期是否正确,如果不正确,需要调整 mysql 容器内的系统日期时间

方式一:

//1、把当前宿主机的时区信息复制到mysql容器的时区中
docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名称或Id:etc/localtime
 
//2、重启mysql服务即可
docker restart 容器名称或Id

方式二:

共享主机的 localtime,创建容器的时候指定启动参数,挂载 localtime 文件到容器内

docker run --name 容器名称 -v /etc/localtime:/etc/localtime

如此,时区不一致的问题就解决了

mysql查出时间相差14小时

问题重现

服务器使用mysql 5.7数据库,线上运行程序时,保存时间相差14小时

问题排查

首先以为是线上linux系统数据库时区问题,特地查看了线上linux数据库时区

Last login: Wed Nov 27 14:39:13 2019 from 192.168.2.147
[root@localhost ~]# date -R
Thu, 28 Nov 2019 08:44:39 +0800
[root@localhost ~]# hwclock
2019年11月28日 星期四 08时44分52秒  -0.938419 秒
[root@localhost ~]# 

检查时区后发现时区设置是正确的,怀疑是线上数据库时区设置问题,检查线上数据库时区设置

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

发现线上数据库时区设置也是一致,于是在本地重新运行程序,添加断点,监听时间传参变化,断点逐步进行,在保存至数据库前,断点中检查的时间都是正确的,可以确定是数据库时间保存时出现的问题。

在这个地方我自己遇到的问题更尴尬,排查问题时是在同事电脑上进行排查,检查了pom文件中依赖的mysql-connector-java 版本号是 5.1.46 ,运行时无报错信息,但实际打包项目时使用的是我电脑进行打包,但我电脑中pom文件里mysql-connector-java 版本号写的是runtime,也就是跟着springboot版本选择,我使用的springboot版本号是2.1.5,所以对应的mysql版本jar包文件是8.0的jar包,就是这个问题导致是时间相差了14小时,更改mysql版本号,重新运行,问题解决。

自己在排查问题过程中也发现了类似相关的数据库时间保存相差N小时问题主要出于几种情况:

  • 数据库版本不一致 
  • marven依赖jar包版本与数据库版本不一致
  • mysql时区设置错误
  • 系统时区错误

 到此这篇关于解决MySQL时区日期时差8个小时的问题的文章就介绍到这了,更多相关MySQL差8个小时内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL学习第三天 Windows 64位操作系统下验证MySQL

    MySQL学习第三天 Windows 64位操作系统下验证MySQL

    MySQL学习第三天教大家如何在Windows 64位操作系统下验证MySQL,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Mybatis集成MySQL使用游标查询处理大批量数据方式

    Mybatis集成MySQL使用游标查询处理大批量数据方式

    这篇文章主要介绍了Mybatis集成MySQL使用游标查询处理大批量数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • mysql优化limit查询语句的5个方法

    mysql优化limit查询语句的5个方法

    这篇文章主要介绍了mysql优化limit查询语句的5个方法,它们分别是子查询优化法、倒排表优化法、反向查找优化法、limit限制优化法和只查索引法,需要的朋友可以参考下
    2014-07-07
  • windows中同时安装两个不同版本的mysql数据库

    windows中同时安装两个不同版本的mysql数据库

    在项目中可能会用到多个版本的Mysql数据库,尤其是最常用的5版本的和8版本数据库,下面这篇文章主要给大家介绍了关于windows中同时安装两个不同版本的mysql数据库,需要的朋友可以参考下
    2024-03-03
  • MySQL创建用户与授权方法

    MySQL创建用户与授权方法

    MySQL中创建用户与授权的实现方法,对于刚开始接触mysql的朋友可以参考下
    2012-11-11
  • MySQL表类型 存储引擎 的选择

    MySQL表类型 存储引擎 的选择

    这篇文章主要介绍了MySQL表类型存储引擎的选择,文章围绕MySQL表类型存储引擎的选择的相关资料展开内容,需要的朋友可以参考一下,希望对你有所帮助
    2021-11-11
  • Linux mysql命令安装允许远程连接的安装设置方法

    Linux mysql命令安装允许远程连接的安装设置方法

    对大家推荐很好使用的Linux mysql系统,像让大家对Linux mysql系统有所了解,然后对Linux mysql系统全面讲解介绍,希望对大家有用今天特意配置了mysql apache php ,虽然网上很多这方面的例子,但是很多是作者再回忆写的,所以难免有笔误的地方。
    2010-08-08
  • 运维角度浅谈MySQL数据库优化(李振良)

    运维角度浅谈MySQL数据库优化(李振良)

    一个成熟的数据库架构并不是一开始设计就具备高可用、高伸缩等特性的,它是随着用户量的增加,基础架构才逐渐完善。这篇博文主要谈MySQL数据库发展周期中所面临的问题及优化方案
    2015-07-07
  • 浅析MySQL 备份与恢复

    浅析MySQL 备份与恢复

    这篇文章主要介绍了MySQL 备份与恢复的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • 浅谈mysql密码遗忘和登陆报错的问题

    浅谈mysql密码遗忘和登陆报错的问题

    下面小编就为大家带来一篇浅谈mysql密码遗忘和登陆报错的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论