MySQL 时区问题:设置了 my.ini 并重启了服务,依旧是 0 时区

1、问题再现

在撰写 飞书 API 2-5 时,需要新建一些数据表,以便实施从数据库到多维表的数据同步。
我建了2个测试数据表,连表查询之后,将时间戳转为时间格式返回,结果发现少了 8 小时。

具体逻辑抽象为以下,创建一个数据表

BEGIN;
-- 建库建表
create table if not exists user_orders(id             bigint       auto_increment    	comment '订单ID',user_id       bigint       not null    				comment '用户ID',production_id varchar(50)  not null     				comment '商品ID',paid_time     bigint       not null      			comment '用户付款时间',amount        bigint      						 					comment '订单付款金额/分',created_at    timestamp    not null default current_timestamp comment '创建时间',updated_at    timestamp    not null default current_timestamp on update current_timestamp comment '更新时间',primary key(id)
)engine=InnoDB comment '用户订单表';-- 插入数据
insert into my_datas.user_orders(user_id,production_id,paid_time,amount) values
(1,10,1704095836,99900),
(2,10,1704195836,99900),
(3,10,1704295836,99900),
(4,12,1704395836,89900);
COMMIT;

然后查询数据(结果如下),直接看这个结果可能没有什么概念,找个在线的时间戳来做下对比。

SELECT from_unixtime(paid_time) aa,paid_time FROM user_orders LIMIT 100

image.png

拿第一个时间戳示例,可以发现 MySQL 中是“2024-01-01 07:57:16”,而实际上是“2024-01-01 15:57:16”少了 8 小时。
image.png

2、搜寻“解药”

首先我找了通义千问,它给了三个“药方”:

# 1、会话(本次会话):影响当前客户端的会话
set time_zone = '+08:00';
# 2、全局(本次服务):影响所有新连接到MySQL服务器的客户端
set global time_zone = '+08:00';
# 3、永久有效:my.ini 文件添加时区配置(如下)
default-time-zone='+08:00'

第一、二种是没问题,但是它们不能长期有效,当服务器重启的时候,便都失效了!于是尝试第三种。但是配置好了,也重启了,但是最终的结果并不符合预期,执行以下 SQL 代码,返回的都是 0 时区的,而没有北京时间。

show variables like 'time_zone';

image.png

一度怀疑是不是配置文件失效,于是做了个测试,修改 my.ini 文件中的一些配置,比如max_connections,一开始是 20,然后我把它改为 10,重启服务,修改前后的结果显示均和 my.ini 一致,所以说明文件没问题,是其他的问题导致的。

# 允许最大连接数
max_connections=20

修改后结果:

show variables like 'max_connections';

image.png

一度以为是default-time-zone='+08:00'格式有问题,但很快就打消了给想法,疑问,有问题的话,服务器连启动都会无法启动。

尝试百度查一查,发现来来回回基本上就是介绍这几种解决方案,似乎屡试不爽,从未失败,但是到我这里,第三种却不灵了,所以还得找自身的问题。

3、解决办法

后来看到一些资料,说在数据库数据文件路径(D:\MySQL\Database\)下有日志文件,于是到其下寻找 log 或 error 关键词的文件,看到好些 binlog 日志和一个 Learning.err。biglog 日志是二进制,肉眼看不出来,而 Learning.err 中没有记录到关于 time_zone 相关的错误。
所以 my.ini 的设置是 OK 的?

在该目录下,发现了2个配置文件:auto.cnf 和 mysqld-auto.cnf。
image.png

分别打开看看,auto.cnf 只有一个服务 ID,跟时区无关。
image.png

mysqld-auto.cnf 中有一个 time_zone 的值是 “+00:00”,难道是它?

{ "Version" : 1 , "mysql_server" : { "time_zone" : { "Value" : "+00:00" , "Metadata" : { "Timestamp" : 1612540350344832 , "User" : "root" , "Host" : "localhost" } } } }

image.png

赶紧修改为 “+08:00” 保存,重启服务器试试。
命令行重启 MySQL 服务器的方法如下

net stop mysql		# 关闭服务
net start mysql		# 启动服务

重新连接 MySQL 然后查询时区信息,发现已经修改为北京时间。
image.png

后来查了一些资料了解到,MySQL 数据库数据目录下的 mysqld-auto.cnf 文件是用来存储由 MySQL 系统自动设置并需要持久化的配置变量值。此文件在启动时最后被读取,它的设置会覆盖其他配置文件中相同变量的值,提供了一种高级别的配置优先级。
这个文件是在 MySQL 8.0 版本引入的一个特性,它与 auto.cnf 文件功能相似但更专门化。当使用SET PERSISTSET PERSIST_ONLY命令来改变某些系统变量的值时,这些变更会被写入到 mysqld-auto.cnf 文件中,以确保即使在 MySQL 服务重启之后,这些设置仍然生效。

这样做的好处是允许数据库管理员动态地更改某些配置,并且这些更改能够在数据库重启时保持不变,无需手动编辑传统的配置文件如 my.cnf 或 mysqld.cnf。这个文件增强了灵活性和管理效率,特别是在需要频繁调整配置或进行故障恢复的情况下。

4、小结

解决时区的方法有 4 种,分别对应不同的场景下的操作,其中最后一种是本次问题的唯一解法,解决了 my.ini 文件中一些配置“失效”的问题。

  • 会话(本次会话):影响当前客户端的会话。
    • 优点:不需要重启MySQL服务,缺点:临时策略,一旦MySQL服务被重启,设置就会消失。
set time_zone = '+08:00';
  • 全局(本次服务):影响所有新连接到MySQL服务器的客户端。
    • 优点:不需要重启MySQL服务,缺点:临时策略,一旦MySQL服务被重启,设置就会消失。
set global time_zone = '+08:00';
  • 服务器 my.ini 配置:长期策略
    • 优点:永久保存设置,缺点:需重启MySQL服务
default-time-zone='+08:00'
  • 数据库 mysqld-auto.cnf 配置:长期策略,在 my.ini 之上的配置,修改 time_zone 的值为 “+08:00”
"time_zone" : { "Value" : "+08:00" , "Metadata" : { "Timestamp" : 1612540350344832 , "User" : "root" , "Host" : "localhost" }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

S7-1200PLC 2轴直线插补(详细方案对比)

1、V90速度轴应用 速度轴V90PN总线伺服梯形加减速速度控制(标准报文1应用)_v90伺服加减速时间怎么调整-CSDN博客文章浏览阅读288次。SMART PLC斜坡函数SMART PLC斜坡函数功能块(梯形图代码)_RXXW_Dor的博客-CSDN博客斜坡函数Ramp的具体应用可以参看下面的文章链接:PID优化系…

数据库-MySQL 实战项目——书店图书进销存管理系统数据库设计与实现(附源码)

一、前言 该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。 所需环境 MySQL可视化工具:navicat; 数据库:MySq…

[笔记] SEW的振动分析工具DUV40A

1.便携式振动分析仪 DUV40A 文档编号:26871998/EN SEW是一家国际化的大型的机械设备供应商。产品线涵盖电机,减速机,变频器等全系列动力设备。DUV40A是他自己设计的一款振动分析工具。 我们先看一下它的软硬件参数: 内置两路传…

防火墙综合实验之NAT和智能选路

目录 前言: 一、实验题目 二、实验操作 需求一 需求二 需求三 需求四、需求五 需求六 需求七 ​编辑 需求八 需求九 需求十 需求十一 三、需求测试 前言: 本篇文章是延续上一篇文章,简单来说就是防火墙实验的完善和延续&#…

CV07_深度学习模块之间的缝合教学(2)--维度转换

教学(1):链接 1.1 预备知识 问题:假如说我们使用的模型张量是三维的,但是我们要缝合的模块是四维的,应该怎么办? 方法:pytorch中常用的函数:(1)view函数(2…

新华三H3CNE网络工程师认证—DHCP使用场景

网络服务与应用当中的技术有DHCP、Telnet和FTP。DHCP是计算机当中常用来获取地址的。比如日常使用中,计算机并没有接入IP,IP通过DHCP技术从上端服务去获取的。手动配置网络参数会出现多种问题。 文章目录 一、手动配置网络参数的问题1、参数多、理解难2、…

【零基础】学JS之APIS第四天

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

喰星云·数字化餐饮服务系统 多处 SQL注入漏洞复现

0x01 产品简介 喰星云数字化餐饮服务系统是一款专为餐饮企业设计的综合性管理软件,旨在通过信息化手段提升餐饮企业的运营效率、降低运营成本,并实现数据驱动的决策管理。该系统包括供应链管理、财务管理、巡店管理、人力资源管理等多个模块,可全面覆盖餐饮企业的日常运营需…

Zynq7000系列FPGA中的DDR内存控制器

DDR内存控制器是一个高度集成的组件,支持多种DDR内存类型(DDR2、DDR3、DDR3L、LPDDR2),并通过精心设计的架构来优化内存访问效率。 DDR内存控制器架构 AXI内存端口接口(DDRI):该部分负责处理与…

雷赛运动控制卡编程(2)限位设定与回原方式、脉冲模式设置

一、限位开关及急停开关的设置 限位开关的设置 //设置限位开关// dmc_set_el_modeushort _cardNo0;ushort _axisNo 0;ushort _enable 1; // 正负限位使能 ushort _elLogic 0; // 正负限位 低电平 有效ushort _model 0;// 正负限位停止方式为立即停止LTDMC.dmc_set_el_m…

构建实用的NLP应用程序:重塑人类与计算机的协同工作方式

文章目录 一、NLP技术的核心价值二、构建实用NLP应用程序的关键步骤三、NLP应用程序在协同工作中的创新应用《赠ChatGPT中文范例的自然语言处理入门书》编辑推荐内容简介作者简介精彩书评目录前言/序言获取方式 在数字化时代,自然语言处理(NLP&#xff0…

手机数据恢复:适用于 Android 的 4 大数据恢复应用程序

没有人希望丢失设备上的重要数据。如果发生这种情况,请不要惊慌。以下是可帮助您恢复丢失或删除的数据的 Android 数据恢复应用程序列表。 有多种方法可以恢复已删除或丢失的 Android 数据,最简单、最快捷的方法是使用第三方恢复应用程序。这些应用程序会…

Transformer模型:Postion Embedding实现

前言 这是对上一篇WordEmbedding的续篇PositionEmbedding。 视频链接:19、Transformer模型Encoder原理精讲及其PyTorch逐行实现_哔哩哔哩_bilibili 上一篇链接:Transformer模型:WordEmbedding实现-CSDN博客 正文 先回顾一下原论文中对Posit…

[Windows] 号称最快免费小巧的远程桌面 AnyDesk v8.0.11单文件版

描述 对于经常在互联网上进行操作的学生,白领等! 一款好用的软件总是能得心应手,事半功倍。 今天给大家带了一款高科技软件 虽然 QQ 拥有远程协助功能,但很多时候连接并不够流畅,而且被控电脑那方也必须要有人操作才行…

电脑关机被阻止

1. winR输入regedit进入注册表 2. 选择HKEY_USERS-》.DEFAULT-》Control Panel-》Desktop 3. 右键DeskTop新建字符串值,命名为AutoEndTasks,数值设置为1

C++中链表的底层迭代器实现

大家都知道在C的学习中迭代器是必不可少的,今天我们学习的是C中的链表的底层迭代器的实现,首先我们应该先知道链表的底层迭代器和顺序表的底层迭代器在实现上有什么区别,为什么顺序表的底层迭代器更加容易实现,而链表的底层迭代器…

不会编程怎么办?量化交易不会编程可以使用吗?

量化交易使用计算机模型程序代替人工进行交易,一般需要投资者自己编写程序建模,然后回测无误之后再进行实盘交易,那么不会编程的投资者能使用量化软件进行量化交易吗? 不会编程使用量化软件有两种方法 一种是请人代写代码&#x…

Java软件设计模式-单例设计模式

目录 1.软件设计模式的概念 2.设计模式分类 2.1 创建型模式 2.2 结构型模式 2.3 行为型模式 3.单例设计模式 3.1 单例模式的结构 3.2 单例模式的实现 3.2.1 饿汉式-方式1(静态变量方式) 3.2.2 懒汉式-方式1(线程不安全) 3.…

办公灯多普勒雷达模组感应开关,飞睿智能24G毫米波雷达超低功耗uA级,节能LED灯新搭档

在科技日新月异的今天,节能、环保已经成为我们生活和工作中不可或缺的一部分。作为新时代的办公人,我们不仅要追求高效的工作方式,更要关注我们所使用的设备是否足够环保、节能。今天,我们就来聊聊一个令人兴奋的创新——飞睿智能…

如何30分钟下载完368G的Android系统源码?

如何30分钟下载完368G的Android系统源码? Android系统开发的一个痛点问题就是Android系统源码庞大,小则100G,大则,三四百G。如标题所言,本文介绍通过局域网高速网速下载源码的方法。 制作源码mirror 从源码git服务器A&#xff0c…