困扰的问题终于解决了-docker时区不正确的问题修改记
前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时。我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的。
mybatis-plus打印的sql脚本中,包含时间参数的,都被强制减掉了8个小时,我一开始还以为是java方面的问题,原来是docker时区没有设置正确。mybytis-plus也是等数据库执行了才把SQL语句打印出来的,问题根源在数据库的微服务中!
看了docker用了什么版本 cat /etc/issue,原来用的是debian 9,不熟悉,加上docker各种命令不安装,非常难弄。
查看时区 date -R,果然不是北京时间。
千辛万苦安装了ntpdate,却提示 Can't adjust the time of day: Operation not permitted,修改时间也没有权限。因为docker也算是虚拟机吧,不能修改。
最后发现用宿主机的时间配置文件复制到容器就好了,真是笨,摸索了一两个小时。。。
docker cp /usr/share/zoneinfo/Asia/Shanghai mysql:/etc/local
mysql时间正确了,但是查询的时候时间还是少了8个小时,这时候我才想到,另外一个微服务的容器里面的时区会不会也是错的?
2019-08-19 00:37:30
熬到半夜了,也不顾头发快掉光了,继续研究,打开神器 wireshark 然后输入tcp.port==3306进行过滤,请求就出来了。尴尬的是我抓包看到的SQL语句就是减少了8个小时的。我好纳闷,连别的mysql服务器没有问题啊,怎么连这个mysql服务器就有问题了呢?虽然我知道就是这台mysql服务器的问题,但我还不明确具体问题出在哪。后来看到wireshark捕获到的一堆请求,我才想到,在我的 Java 服务启动时,spring boot 会去和mysql数据库建立联系,这时候就会获取mysql的时区,所以最根本的问题就是mysql的时区设置了!
虽然mysql容器里面的操作系统时区改了,但是我忘记了修改mysql的时区,所以show variables like '%time_zone%'查询出来是这样的:
Variable_name Value
system_time_zone CST
time_zone SYSTEM
想想自己真是蠢货啊。容器里面改不了,只好在宿主机改了,再复制进去。
[root@localhost ~]# docker cp mysql:/etc/mysql/my.cnf ./my.cnf
[root@localhost ~]# vim my.cnf
[root@localhost ~]# docker cp my.cnf mysql:/etc/mysql/my.cnf
[root@localhost ~]# docker restart mysql
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links= # Custom config should go here
!includedir /etc/mysql/conf.d/ default-time-zone = '+8:00'
设置后,重启mysql容器,docker restart mysql,然后查询变量,show variables like '%time_zone%'查询出来是这样的:
Variable_name Value
system_time_zone CST
time_zone +08:00
后来再启动服务一看,终于好了。可以睡觉了,毕竟头发不多了。
困扰的问题终于解决了-docker时区不正确的问题修改记的更多相关文章
- docker时区不正确的问题修改记
前一阵子有一台服务器,mysql的时间比北京时间晚了8个小时.我知道是时区的问题,但是不知道为什么弄成这样,宿主机没有问题,后来一看mysql的docker,时区是错的. mybatis-plus打印 ...
- 终于解决了一个Win7 下 VS 编译的问题,困扰了我好几个月
用 Win7 一年多了,一直在这个环境下编程,其他都挺好,就是有个问题非常恶心,在VS下编译经常出现进程正在使用,无法覆盖的错误,这个问题我记得博问中以前也有其他人遇到过,也没有解决掉.此问题困扰了我 ...
- Docker/K8s 解决容器内时区不一致方案
转载自:https://cloud.tencent.com/developer/article/1433215 1.背景介绍 我们知道,使用 docker 容器启动服务后,如果使用默认 Centos ...
- PhpStorm 2016.3 For Mac 重大里程碑更新 -- 终于解决了不能输入中文标点符号的重大bug
PhpStorm 2016.3 For Mac 重大里程碑更新 1.[终于解决了]不能输入中文标点符号的重大bug,如 逗号“,”.“.”: 2.可以在一个窗体中,同时打开多个项目: 3.其他... ...
- 被Spring坑了一把,查看源码终于解决了DataFlow部署K8s应用的问题
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 基于各种原因,团队的Kubernetes被加了限制,必须在 ...
- 终于解决了IE8不支持数组的indexOf方法,array的IndexOf方法
/* 终于解决了IE8不支持数组的indexOf方法 */ if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (el ...
- 【转】终于解决了Apache乱码问题
之前开放了一个空间,给网友提供电台节目音频下载.由于多年节目的文件数量甚多,且分类没有特定格式,图省事,没有制作网页提供分类下载,而是直接利用Apache的目录浏览功能,简单直观. 不过,所在的美国服 ...
- 非常的奇葩,终于解决了硬盘从盘盘符消失的问题 http://bbs.gamersky.com/thread-1712710-1-1.html (出处: 游民星空论坛)
本人用电脑也十多年了,硬盘的问题也碰到过不少.但最近却碰到了一个很奇葩的问题.就是安装了一块全新的SSD硬盘当从盘,但在装上之后,在我的电脑中却不显示,没有盘符.不过打开系统磁盘管理却能显示硬盘信息. ...
- 终于解决了贴吧手机版的一个重大BUG
终于解决了贴吧手机版的一个重大BUG 别诧异虽然同一个域名,但是,PC 和手机打开完全不一样的体验 http://tieba.yunxunmi.com/ 吃点夜校准备做梦去!! 发现 我云贴吧 一个 ...
随机推荐
- Android平台本地(离线)打包指南 - Android Studio
预备环境 AndroidStudio开发环境,要求安装Android4.0或以上(API 14)SDK. 下载HBuilder离线打包Android版SDK(5+ SDK下载). 离线打包SDK目录说 ...
- 本地 vs. 云:大数据厮杀的最终幸存者会是谁?— InfoQ专访阿里云智能通用计算平台负责人关涛
摘要: 本地大数据服务是否进入消失倒计时?云平台大数据服务最终到底会趋向多云.混合云还是单一公有云?集群规模增大,上云成本将难以承受是误区还是事实?InfoQ 将就上述问题对阿里云智能通用计算平台负责 ...
- Python 中的 map, reduce, zip, filter, lambda基本使用方法
map(function, sequence[, sequence, ...] 该函数是对sequence中的每个成员调用一次function函数,如果参数有多个,则对每个sequence中对应的元素 ...
- 数据ETL是指什么
ETL是数据抽取(Extract).清洗(Cleaning).转换(Transform).装载(Load)的过程.是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义 ...
- linux中各目录及详细介绍
一.Linux文件系统的层次结构 在Linux或UNIX操作系统中,所有的文件和目录都被组织成一个以根节点开始的倒置的树状结构,如图: 二.目录 1.目录的定义 目录相当于Windows中的文件夹,目 ...
- gpu命令cuda命令
# device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")os.envi ...
- php json_encode输出为空问题
这种情况一般是json_encode序列化数组时出现错误,错误原因有很多,可以通过json_last_error函数来查看错误原因!!! 可能的原因 ------------------------- ...
- typeid, const_cast<Type>的使用
#include <bits/stdc++.h> using namespace std; class A { public : void Show() { cout << & ...
- Laravel 的HTTP请求#
获取请求# 要通过依赖注入的方式来获取当前HTTP请求的实例,你应该在控制器方法中类型提示Illuminate\Http\Request 传入的请求的实例通过 服务容器自动注入: <?php n ...
- django之请求方法
Http1.0定义了三种请求方法:GET,POST和HEAD方法 Http1.1新增了五种请求方式:OPTIONS,PUT,DELETE,TRACE和CONNECT方法 ----get ...