解决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启动时报“The server quit without updating PID file”错误的原因

    深度解析MySQL启动时报“The server quit without up

    这篇文章主要介绍了MySQL启动时报“The server quit without updating PID file”错误的原因,需要的朋友可以参考下
    2017-05-05
  • Mysql账户管理原理与实现方法详解

    Mysql账户管理原理与实现方法详解

    这篇文章主要介绍了Mysql账户管理原理与实现方法,结合实例形式详细分析了mysql账户管理的原理、操作技巧、相关问题解决方法与注意事项,需要的朋友可以参考下
    2020-01-01
  • MySQL中的RIGHT JOIN和CROSS JOIN操作示例

    MySQL中的RIGHT JOIN和CROSS JOIN操作示例

    本文详细介绍了MySQL中的RIGHT JOIN和CROSS JOIN操作,RIGHT JOIN返回右表中的所有记录及与左表中的记录相匹配的记录,而CROSS JOIN返回两个表中所有可能的组合,通过实际示例和输出结果,我们展示了如何使用RIGHT JOIN和CROSS JOIN进行数据库查询,一起看看吧
    2023-07-07
  • MySQL递归sql语句WITH表达式实现方法代码

    MySQL递归sql语句WITH表达式实现方法代码

    SQL递归查询语句是指通过递归方式对数据进行查询的语句,下面这篇文章主要给大家介绍了关于MySQL递归sql语句WITH表达式实现的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT解决办法

    mysql8报错:ERROR 1410 (42000): You are not allowed to 

    电脑新装的mysql,版本为8.0以上,分配权限时直接带密码和账号会报错,这篇文章主要给大家介绍了关于mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT的解决办法,需要的朋友可以参考下
    2022-06-06
  • MySQL通过存储过程来添加和删除分区的过程(List分区)

    MySQL通过存储过程来添加和删除分区的过程(List分区)

    这篇文章主要介绍了MySQL-通过存储过程来添加和删除分区(List分区),本文通过创建存储过程来添加和删除分区,可以避免在分区存在时添加分区报错,或者分区不存在时删除分区报错的问题,需要的朋友可以参考下
    2023-09-09
  • MySQL中分页优化的实例详解

    MySQL中分页优化的实例详解

    这篇文章主要介绍了MySQL中分页优化的实例详解,分页优化是MySQL优化当中的重点,需要的朋友可以参考下
    2015-05-05
  • windows下mysql 8.0.27 安装配置方法图文教程

    windows下mysql 8.0.27 安装配置方法图文教程

    这篇文章主要为大家详细介绍了windows下mysql 8.0.27 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • mySQL count多个表的数据实例详解

    mySQL count多个表的数据实例详解

    这篇文章通过实例给大家介绍了mySQL中count多个表的数据,也就是多个表如何联合查询,文中通过项目中遇到的一个问题进行分析和实现,给出了详细的示例代码,相信对大家的理解和学习很有帮助,有需要的朋友们下面来一起看看吧。
    2016-11-11
  • MySQL利用索引优化ORDER BY排序语句的方法

    MySQL利用索引优化ORDER BY排序语句的方法

    这篇文章主要介绍了MySQL利用索引优化ORDER BY排序语句的方法,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-10-10

最新评论