Mysql查询时间和页面显示时间相差八个小时。

在一次线上程序调用mysql内部函数转化时间戳的时候的bug记录。在本地开发与测试环境都没得问题。但是上线后,程序总是不再状态。

遂开启审阅代码的过程,修bug轻轻松松耗费几个小时。最后在数据库中执行使用的原生sql语句,大概长这样:1

2(UNIX_TIMESTAMP(CURRENT_TIMESTAMP) - UNIX_TIMESTAMP(last_spider_time)

) > 600

一直回显不出数据。

猜想应该是时间戳出现了问题。验证一下执行时间戳的内容。1

2

3

4SELECT

UNIX_TIMESTAMP(CURRENT_TIMESTAMP) ,

UNIX_TIMESTAMP('2019-08-28 18:30:35');

当前的时间已经大于18点,但是返回的18点的时间戳确实2点的时间戳。快了8个小时。1

2

31567006237

1567017035

在本地开发环境执行的结果是

这是一个正常的结果。

输出当前的时区1show variables like "%time_zone%";

开发测试环境结果为显示系统时间1

2

3

4

5

6

7

8

9mysql> show variables like "%time_zone%";

+------------------+--------+

| Variable_name | Value |

+------------------+--------+

| system_time_zone | |

| time_zone | SYSTEM |

+------------------+--------+

2 rows in set, 1 warning (0.00 sec)

服务器显示结果也为系统时间1

2

3

4

5

6

7

8mysql> show variables like "%time_zone%";

+------------------+--------+

| Variable_name | Value |

+------------------+--------+

| system_time_zone | UTC |

| time_zone | SYSTEM |

+------------------+--------+

2 rows in set (0.00 sec)

我们看下服务器系统的时区date

发现是utc的时区。我们需要增加8个小时的时区了。

方案

更改系统时区,傻瓜式更改1tzselect

选择 49111

2

3cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

ntpdate time.windows.com

重启

或者

设置时区更改为东八区1set global time_zone = ‘+8:00’;

刷新权限1flush privileges;

结果

时区正常1

2

3

4

5

6

7

8

9mysql> SELECT

->

-> UNIX_TIMESTAMP(CURRENT_TIMESTAMP) ,

-> UNIX_TIMESTAMP('2019-08-28 18:30:35');

+-----------------------------------+---------------------------------------+

| UNIX_TIMESTAMP(CURRENT_TIMESTAMP) | UNIX_TIMESTAMP('2019-08-28 18:30:35') |

+-----------------------------------+---------------------------------------+

| 1567009347 | 1566988235 |

+-----------------------------------+---------------------------------------+

在docker中创建mysql容器,容器的时间是utc

在拉取mysql官方镜像的时候,创建的容器时间仍然是utc,解决的方式有

1、在创建容器的时候就设置容器的时区以及mysql的默认时区1

2

3

4# docker启动命令

docker run --name changle-mysql -p 3306:3306 -e [email protected] -e MYSQL_DATABASE=changle

-e TZ=Asia/Shanghai -d mysql:5.6

--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time_zone='+8:00'

参数说明MYSQL_ROOT_PASSWORD : 设置mysql数据库root的密码

MYSQL_DATABASE : 启动时创建数据库

TZ=Asia/shanghai : 设置容器时区

character-set-server : 服务器字符集,在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集。

character-set-database : 数据库字符集

character-set-table : 数据库表字符集

collation-server : 排序规则字符集

default-time_zone : mysql的时区

2、手动进入到容器内部、更改时区

记得重启容器

3、在不重启容器情况向下

可以直接将宿主机文件复制到容器内部1docker cp /etc/localtime [containerId]:/etc/localtime

查看容器的时间1docker exec [containerId] date

mysql时区错乱_记一次线上mysql时区错乱相关推荐

  1. java mysql死锁_记一次线上mysql死锁分析(一)

    记录一次比较诡异的mysql死锁日志.系统运行几个月来,就在前几天发生了一次死锁,而且就只发生了一次死锁,整个排查过程耗时将近一天,最后感谢我们的DBA大神和老大一起分析找到原因. 诊断死锁 借助于我 ...

  2. 在线分析mysql死锁详解_记一次线上mysql死锁分析(一)

    记录一次比较诡异的mysql死锁日志.系统运行几个月来,就在前几天发生了一次死锁,而且就只发生了一次死锁,整个排查过程耗时将近一天,最后感谢我们的DBA大神和老大一起分析找到原因. 诊断死锁 借助于我 ...

  3. mysql死锁语句_记一次神奇的Mysql死锁排查

    背景 说起Mysql死锁,之前写过一次有关Mysql加锁的基本介绍,对于一些基本的Mysql锁或者死锁都有一个简单的认识,可以看下这篇文章为什么开发人员需要了解数据库锁.有了上面的经验之后,本以为对于 ...

  4. mysql++裸盘_记一次裸迁 MySQL 经历

    记一次裸迁MySQL经历 前言:博主企业有一台企业阿里云机器,因为安装了云锁,造成服务器动不动就给我所死服务器.(就是那种 chattr +i /bin/bash ,分分钟日死狗 )趁着周末,Boos ...

  5. telephone 为空 唯一索引_记一次线上唯一索引失效没有起效的场景

    背景描述:我们系统A做远程在线接口提供给B系统调用,每次的请求参数中都带有幂等单号用来做幂等校验,幂等单号对应的字段是不可空且唯一的.由于对应的业务表线上已有数据,这个幂等字段数据新加的字段,所以要做 ...

  6. mysql 插入慢_记一次生产环境mysql数据库参数优化,值得收藏

    概述 最近在对各个系统的mysql做一些参数上的优化,也开了慢查询,准备后面针对特定sql再进一步优化.下面主要介绍一下一些优化的参数. 1.优化前mysql配置 可以看到基本上是没怎么做优化的. 2 ...

  7. mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决

    本文主要向大家介绍了线上MySQL数据库机器内存爆掉原因分析与解决,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨 ...

  8. 线上Mysql数据库崩溃事故的原因和处理

    前文提要 承接前文<一次线上Mysql数据库崩溃事故的记录>,在文章中讲到了一次线上数据库崩溃的事件记录,建议两篇文章结合在一起看,不至于摸不着头脑. 由于时间原因,其中只讲了当时的一些经 ...

  9. 记一次线上应用连接池满的处理

    记一次线上应用dubbo-claim连接池满的处理 首先看到dubbo-claim应用突然大面积报错,基本反馈是冻结预算出问题了,看了看冻结预算的代码,发现写的非常复杂,果断放弃看代码来排查问题. C ...

最新文章

  1. 互联网协议 — TCP — 性能问题解析
  2. 最全mysql的复制和读写分离
  3. 回顾我走过的编程之路
  4. 结合业务场景案例实践分析,倾囊相授美团BERT的探索经验
  5. 数据库树状结构的关系表的删除方案
  6. 【JS 逆向百例】PEDATA 加密资讯以及 zlib.gunzipSync() 的应用
  7. “寒武纪大爆发”之后的云原生,2021年走向何处?
  8. 网站登录JWT的实现
  9. linux编程学习_您需要编程技能才能学习Linux吗?
  10. 【三】Jmeter:测试片段
  11. Android DataBinding 从入门到进阶
  12. RHadoop的安装与试验
  13. python进阶方向_python进阶—边练边学,学到极致
  14. OA 办公自动化系统 现状
  15. vuejs登陆页面_20个最佳Vuejs登陆页面模板
  16. 【渝粤教育】广东开放大学 建设工程法规 形成性考核 (32)
  17. Schema for type Unit is not supported
  18. BIOS和UEFI的区别
  19. Ol4网格生成以及优化
  20. gitea/gogs忘记密码后重置密码

热门文章

  1. esxi6.7虚拟机无法开机,提示“没有更多空间可供虚拟磁盘server-000001.vmdk使用。也许通过释放相关卷上的磁盘空间并单击 重试 继续此会话,单击 取消 可终止此会话”
  2. 【SQL注入漏洞-04】布尔盲注靶场实战
  3. 2005年中国BBS社区100强
  4. 64位整数乘法 ab%p
  5. 中国“智”造——新车评网试驾观致3
  6. sublime text 3开启vi编辑模式
  7. 跟我一起玩Win32开发(6):创建右键菜单
  8. 算法---消除游戏(Kotlin)
  9. Windows命令行的使用
  10. 工作占用了太多私人时间_职场谋略:下班后领导总发微信占用私人时间,怎么应对?...