基于 Docker 部署 Mysql 的时区设置解决方案

这篇具有很好参考价值的文章主要介绍了基于 Docker 部署 Mysql 的时区设置解决方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景描述

环境版本及条件:

  • 基于 Docker 部署的 Mysql:8.0.27 版本数据库中。
  • datatime 数据类型的字段设置了默认时间戳 CURRENT_TIME。
  • SpringBoot + MP。

问题复现:

  • 使用MP插入数据时,该字段的默认时间戳比 Asia/Shanghai 时区少了 8 小时。

问题追因

排查过程:

  1. 查看 Mysql 时区配置属性。
show variables like '%time_zone%';

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
  1. 查看 Docker 容器系统所处时区。
date -R
# Result:
Mon, 15 May 2023 15:50:42 +0000

原因分析:

  1. 创建 Mysql 容器时忘记选择时区,这时 Docker 会默认给选择 UTC 时区。
  2. Docker 容器所在的系统的默认时区为 +0000。
  3. Mysql 配置文件添加 default-time_zone=‘+8:00’ 后,重启 Mysql 容器时区设置无效,分析 Mysql 服务强制使用其所在容器系统的时区。

解决方案

LXL:

  • 分析原因后通过查找相关资料,以下两种方法亲测有效哦!!!

第一种方法:

  • 通过修改 Mysql 的 Variables 属性,临时修改,重启后无效。
# 进入容器
docker exec -it mysql1 /bin/bash

# 连接 mysql 服务
mysql -uroot -p

# 设置全局会话时区
set global time_zone = '+08:00';

# 设置当前会话时区
set session time_zone = '+08:00';

# 设置后查看 Mysql 时区配置属性。
show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+

第二种方式:文章来源地址https://www.toymoban.com/news/detail-672117.html

  • 通过修改 Docker 容器所使用的时区,永久修改。
# 进入容器
docker exec -it mysql1 /bin/bash

# 下列方法 1~3 中任选其一即可:
# 1.强制生成 Asia/Shanghai 时区文件软链接
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 2.Asia/Shanghai 软链接实际指向 PRC 文件,将其复制为 localtime 时区文件
cp /usr/share/zoneinfo/PRC /etc/localtime
# 3.通过 tzselect 命令,可选择 Beijing、HongKong 城市时区
tzselect 

# 修改后查看当前容器时区
date -R
Mon, 15 May 2023 23:05:49 +0800

# 连接 mysql 服务
mysql -uroot -p
# 设置后查看 Mysql 时区配置属性。
show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+

到了这里,关于基于 Docker 部署 Mysql 的时区设置解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • linux docker 部署mysql8以上版本时弹出Access denied for user root @ localhost (using password: YES)的解决方案

    该结论使用于java启动报错 也试用于windows连接报错 不止linux docker         1.配置文件的mysql或者命令参数的 密码需要带英文单引号         2.不可以挂载之前别的容器使用过的mysql数据目录或者你的执行命令里改过密码,比如之前是run mysql password 123  你改成了run mysql

    2024年02月19日
    浏览(29)
  • Mysql查看数据库时区并设置时区

    当我们使用docker部署Mysql数据库后,我们的数据库时区会有偏差,下面我们看看如何解决: 1.查看数据库时区 2.设置时区 修改配置文件my.cnf(my.ini),增加 参考如下:

    2024年02月12日
    浏览(34)
  • docker学习16-Docker 容器设置时区

    最近遇到一个问题,在本机部署操作时,获取本机当前时间存到mysql数据库,时间是当前北京时间没问题。 但是用Docker 容器部署项目,发现时间少了8个小时,于是想到是docker容器的内部时区问题。 docker 容器一般是debian系统,默认是UTC标准时间 或者先删除localtime 再给软链接

    2024年02月13日
    浏览(34)
  • docker容器设置时区

    1、 在dockerfile中设置镜像时区 2、 创建容器时设置时区 3、进入容器进行设置 docker exec -it 容器名 /bin/bash rm /etc/localtime ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 3、 通过传递环境变量改变容器时区 适用于基于 Debian 基础镜像, CentOS 基础镜像 制作的 Docker 镜像 不适用于基于 A

    2024年02月05日
    浏览(32)
  • 【docker】设置 docker 国内镜像仓库报错,解决方案

    daemon.json 格式错误 配置冲突 ,如 daemon.json 和 docker.service 中同时配置了同一个参数 1. 删除 daemon.json 或者 重命名成 daemon.conf ( 不推荐,效果相同 )          全网很多博主的解决方案是重命名成 daemon.conf,但是通过docker info查看发现,配置并未生效 2. 复制标准的 daemo

    2024年02月05日
    浏览(45)
  • Docker之 Dockerfile 时区设置

    通过Dockerfile 文件可以编译镜像,但是在docker 容器里面经常会遇到时区设置问题,在此做个总结。 例1: Dockerfile 文件: 时区设置: 例2: Dockerfile 文件: 时区设置: 例3: Dockerfile 文件: 时区设置: 对于linux ln 命令不熟的小伙伴可以参考此文 :Linux 操作命令之 ln 命令

    2024年02月14日
    浏览(29)
  • mysql 时区设置

    方法一:修改 mysql 的配置文件永久设置时区(优点:永久保存设置,缺点:需重启MySQL服务) 找到你MySQL的安装目录(如果不记得安装在哪 可以输入 show variables like “%char%”; 查看), 在其my.ini文件且打开它,找到 mysqld ,在该下面添加 default-time_zone = ‘+8:00’,然后保存。

    2024年02月03日
    浏览(34)
  • Docker系列---【Docker设置时区的三种方式】

    将宿主机与容器的时间进行挂载,直接使用宿主机的时区

    2024年02月17日
    浏览(35)
  • docker开启的Mysql修改时区

    进入docker 查询和修改时区 注意:MySQL 中存储的时间默认为 UTC 时间,因此需要根据需要进行转换。 你可以使用以下命令查询 MySQL 当前的时区: 该命令会返回 MySQL 当前的全局时区设置,如果你想查询当前会话的时区设置,可以使用以下命令: 如果 MySQL 显示的时区为 SYSTEM ,

    2024年02月12日
    浏览(38)
  • 【Docker】Docker 部署 Mysql 并设置数据持久化

    我们使用Docker的目的就是图它方便下载部署,不用常规的经历下载、配置、安装等等繁琐的步骤。但是与此同时Docker也存在一些缺点,像删除容器后数据就都没有了。很显然,不能持久化对于需要数据持久化的MySQL数据库来说是不能接受的,那有没有方式可以解决。 有,通过

    2024年02月10日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包