MySQL与服务器时区问题实践总结

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: MySQL与服务器时区问题实践总结

常见的问题就是8小时问题,通常是由于时区设置错误导致的。

【1】Linux时区

① Centos6下

查看时区

[root@VM_0_12_centos ~]# cat /etc/sysconfig/clock
ZONE="Asia/Shanghai"
[root@VM_0_12_centos ~]# date -R
Tue, 12 Jan 2021 09:42:34 +0800
+0800表示东八区

设置时区

# 复制相应的时区文件,替换系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#软连接设置
 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

修改完Linux时区后,如果MySQL的时区应用的是time_zone=SYSTEM 。那么只有重启MySQL服务才能更新MySQL时区为Linux更新后的时区!


【2】MySQL时区

① 查看MySQL时区

show VARIABLES like '%time_zone%';
mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+

system_time_zone : 表示系统使用的时区是 CST

time_zone: 表示 MySQL 采用的是系统的时区。也就是说,如果在连接时没有设置时区信息,就会采用这个时区配置。


修改MySQL时区

#修改my.cnf文件 在[mysqld]添加如下配置  记得重启mysql服务
default-time-zone='+08:00'

② jdbc连接URL指定时区

修改jdbc连接设置,直接把连接的时区固定死,绕开mysql本身的时区。就是在jdbc连接配置上添加以下两个配置即可:

useTimezone=true&serverTimezone=GMT%2B8
#分别为启用时区设置和设置连接服务的时区。
或者:
serverTimezone=Asia/Shanghai



【3】CET,UTC,GMT,CST

① GMT

Greenwich Mean Time。 格林威治标准时间, 英国伦敦格林威治定为0°经线开始的地方,地球每15°经度 被分为一个时区,共分为24个时区,相邻时区相差一小时;例: 中国北京位于东八区,GMT时间比北京时间慢8小时。所以常见数据库URL上设置GMT+8


格林尼治标准时间(旧译格林尼治平均时间或格林威治标准时间)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。

② UTC


Coordinated Universal Time。 世界协调时间,经严谨计算得到的时间,精确到秒,误差在0.9s以内, 是比GMT更为精确的世界时间。


协调世界时,又称世界标准时间或世界协调时间,简称UTC,从英文“Coordinated Universal Time”/法文“Temps Universel Cordonné”而来。台湾采用CNS 7648的《资料元及交换格式–资讯交换–日期及时间的表示法》(与ISO 8601类似)称之为世界统一时间。中国大陆采用ISO 8601-1988的国标《数据元和交换格式信息交换日期和时间表示法》(GB/T 7408)中称之为国际协调时间。协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。

③ DST

Daylight Saving Time。夏季节约时间,即夏令时。是为了利用夏天充足的光照而将时间调早一个小时,北美、欧洲的许多国家实行夏令时。



④ CST

Central Standard Time。北京时间,China Standard Time,又名中国标准时间,是中国的标准时间。在时区划分上,属东八区,比协调世界时早8小时,记为UTC+8,与中华民国国家标准时间(旧称“中原标准时间”)、香港时间和澳门时间和相同。当格林威治实践为凌晨0:00时,中国标准实践刚好为早上8:00。

Central Standard Time (USA) UT-6:00(美国cst时间:零区时减6个小时)
Central Standard Time (Australia) UT+9:30(澳大利亚cst:加9个半小时)
China Standard Time UT+8:00(中国cst:加8个小时)
Cuba Standard Time UT-4:00  (古巴cst:减4个小时) 
CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间

Asia/Shanghai是已地区命名的地区标准时,在中国叫CST,Linux不能显示设置为CST,可以是Asia/Shanghai。

⑤ CET

欧洲中部时间(英語:Central European Time,CET)是比世界标准时间(UTC)早一个小时的时区名称之一。它被大部分欧洲国家和部分北非国家采用。冬季时间为UTC+1,夏季欧洲夏令时为UTC+2。

【4】测试


① 设置Linux时区为PST(America/New_York)

如下设置后,Linux时区将会快8小时。

ln -sf /usr/share/zoneinfo/US/Pacific /etc/localtime
ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 Jan 12 04:44 /etc/localtime -> /usr/share/zoneinfo/US/Pacific
date -R
Tue, 12 Jan 2021 05:11:17 -0800


② 查看此时MySQL时区

重启MySQL服务,查看时区:

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | PST    |
| time_zone        | SYSTEM |
+------------------+--------+


那么此时项目部署在Linux上,进行插入操作,则插入时间会快8小时:



③ 设置MySQL时区

修改my.cnf,[mysqld]下添加配置:

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


然后重启MySQL服务。再次查看MySQL时区:

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | PST    |
| time_zone        | +08:00 |
+------------------+--------+
2 rows in set (0.00 sec)


再次进行数据插入,此时时间正常:

④ 恢复MySQL时区采用系统时区,通过jdbc.url指定

spingboot项目中application.properties配置如下:

spring.datasource.url=jdbc:mysql://XXXX:3306/fruitmarket?useUnicode=true
&characterEncoding=utf8&serverTimezone=GMT%2B8&useTimezone=true

修改Linux时区为Asia/Shanghai :

[root@VM_0_12_centos classes]# date -R
Tue, 12 Jan 2021 06:26:10 -0800
[root@VM_0_12_centos classes]#  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@VM_0_12_centos classes]# date -R
Tue, 12 Jan 2021 22:27:52 +0800

useTimeZone


主要用在web服务器和数据库部署在不同时区时,转换二者交互中时间数据。


例如:web服务器部署在北京(GMT+8),数据库部署在美国加州(GMT-8)。现在web数据库有一条记录的创建时间是当地时区时间22:00,那存储到数据库的时间应该是数据库当地时区时间06:00。然后web服务器通过jdbc读取到这条记录后,读取到的创建时间应该仍旧是以当地时区为标准的22:00。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
10天前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
78 28
|
27天前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
87 16
|
1月前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
1月前
|
安全 关系型数据库 MySQL
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
【YashanDB知识库】YMP从mysql迁移到崖山,报错:服务器错误
|
2月前
|
存储 SQL 关系型数据库
服务器数据恢复—云服务器上mysql数据库数据恢复案例
某ECS网站服务器,linux操作系统+mysql数据库。mysql数据库采用innodb作为默认存储引擎。 在执行数据库版本更新测试时,操作人员误误将在本来应该在测试库执行的sql脚本在生产库上执行,导致生产库上部分表被truncate,还有部分表中少量数据被delete。
99 25
|
2月前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
2月前
|
监控 关系型数据库 MySQL
如何解决 MySQL 数据库服务器 CPU 飙升的情况
大家好,我是 V 哥。当 MySQL 数据库服务器 CPU 飙升时,如何快速定位和解决问题至关重要。本文整理了一套实用的排查和优化套路,包括使用系统监控工具、分析慢查询日志、优化 SQL 查询、调整 MySQL 配置参数、优化数据库架构及检查硬件资源等步骤。通过一个电商业务系统的案例,详细展示了从问题发现到解决的全过程,帮助你有效降低 CPU 使用率,提升系统性能。关注 V 哥,掌握更多技术干货。
295 0
|
1月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
1月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
292 82
|
1天前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
下一篇
oss创建bucket