修改 Docker 中 MySQL 8 容器时区的问题_docker mysql8 时区-程序员宅基地

技术标签: mysql 8  Linux  时区  # Docker  # MySQL  docker  

【注】MySQL 5.7 也类似,只是配置文件有所改变,在文章中会详细说明。

虽然在正式环境中不推荐使用 MySQL 容器来存储数据,但是在内网的开发环境中还是可以使用的,但是 MySQL 容器默认的不是中国时区,而是世界标准时间(UTC),所以在国内使用的话需要配置一下,否则会早8个小时,可以通过下面方法检查一下:

查看数据库当前时间:

SELECT NOW()
NOW
2020-12-08 06:27:46

查看数据库当前时区:

SHOW VARIABLES LIKE '%time_zone%';
Variable_name Value
system_time_zone UTC
time_zone SYSTEM

说明:

  • system_time_zone UTC : 当前系统时区
  • time_zone:SYSTEM : MySQL 采取的时区,默认为 SYSTEM,跟随系统。

1. 临时设置,重启后失效

通过SQL语句设置。

# 仅修改当前会话的时区,停止会话失效(看具体场景使用)
set time_zone = '+8:00';
# 修改全局的时区配置,但是重启后会失效
SET GLOBAL time_zone = 'Asia/Shanghai'
# 或
SET GLOBAL time_zone = '+8:00'

# 强制刷新
flush privileges

2. 创建新的容器,并指定时区参数

如果原有容器可是删除的话,可以直接创建一个新的容器,并指定时区参数,这样容器的 Linux 环境就成为中国标准时间(CST),时区的标准比较复杂,这里不做太多探讨。

docker run -d -p 3306:3306 --name mysql-test -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=123456 mysql

参数说明:
-e TZ=Asia/Shanghai :表示时区为中国(上海)。

【注】更多参数请访问:

3. 已有容器,进入容器内部修改配置文件

【注】这样修改后,容器所在的 Linux 系统环境仍然使用的是 UTC 时间,而 MySQL 使用的是我们设置的时间。

3.1 环境准备

【注】 容器内部默认使用的是最小化的 debian 发行版,默认没有文本编辑器,需要自行安装。如果不想安装环境,直接异步:高级篇:通过 docker cp 操作配置文件

# 更新源(速度会比较慢)建议使用阿里镜像
apt-get update

# 安装 vim
apt install vim

3.2 进入容器内部

# 查看正在运行的容器
docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                               NAMES
946175835a9f   mysql     "docker-entrypoint.s…"   29 seconds ago   Up 28 seconds   33060/tcp, 0.0.0.0:4000->3306/tcp   mysql-test
# 进入容器内部
docker exec -it mysql-test bash 
# 或 
docker exec -it 946175835a9f bash 

3.3 修改配置文件

配置文件放在 /etc/mysql 目录下。

# MySQL 8 默认只有 my.cnf 和 conf.d 等文件
# 修改的时候只修改 my.cnf 文件即可
cd /etc/mysql
vim my.cnf

# MySQL 5.7 默认有 my.cnf、conf.d、mysql.cnf、mysql.conf.d 等文件
# 修改的时候需修改 mysql.conf.d/mysqld.cnf 文件即可
cd /etc/mysql/mysql.conf.d
vim mysqld.cnf 	

找到 [mysqld] ,并在 datadir 下面另加一行 default-time-zone = '+8:00' 即可,然后保存并退出。
在这里插入图片描述
【注】default-time-zone = '+8:00' 比较简单,如果想更容易理解的话也可以:default-time-zone = 'Asia/Shanghai' ,都是一样的效果。图片中应为 default-time-zone

3.4 重启镜像

docker restart mysql-test

【注】进入 docker 容器内部更多信息请移步:Docker 进入容器,并在容器内执行命令

4. 高级篇:通过 docker cp 操作配置文件

通过第三种方式需要安装额外的文本编辑器才能对配置文件就行编辑与保存,比较麻烦。一般来说宿主机器都会配置好相关的软件,通过使用 docker cp 命令可以把 MySQL配置文件复制到宿主机器上,在宿主机器上编辑完成后,在复制到容器内部替换掉原有的配置文件,在此操作之前,我们最好是先在容器内,将配置文件备份一下(这里以 MySQL 8 为例,MySQL 5.7 类似)。

4.1 备份配置文件

# 进入容器内部
docker exec -it mysql-test bash 
# 或 
docker exec -it 946175835a9f bash 

# 备份文件目录
cd /etc/mysql 
cp my.cnf my.cnf.bak

4.2 从容器中复制配置文件至宿主主机

通过 docker cp 复制容器中的配置文件至宿主主机

# 进入当前用户主目录
cd ~
# 把容器中配置文件复制到当前目录
docker cp mysql-test:/etc/mysql/my.cnf ./
# 修改配置文件(宿主机器)
vim my.cnf

找到 [mysqld] ,并在 datadir 下面另加一行 default-time_zone = '+8:00' 即可,然后保存并退出。
在这里插入图片描述
【注】default-time_zone = '+8:00' 比较简单,如果想更容易理解的话也可以:default-time_zone = 'Asia/Shanghai' ,都是一样的效果。

4.3 从宿主主机复制配置文件至容器内

docker cp my.cnf mysql-test:/etc/mysql/my.cnf

4.4 重启镜像

docker restart mysql-test

进入 docker 容器内部更多信息请移步:Docker 进入容器,并在容器内执行命令

【注】最佳实践

个人博客:Roc’s Blog

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/peng2hui1314/article/details/110864486

智能推荐

Kafka笔记整理(二):Kafka Java API使用-程序员宅基地

[TOC]下面的测试代码使用的都是下面的topic:$ kafka-topics.sh --describe hadoop --zookeeper uplooking01:2181,uplooking02:2181,uplooking03:2181Topic:hadoop PartitionCount:3 ReplicationFactor:3 Configs:...

最近16款免费的Wordpress主题-程序员宅基地

日期:2012-12-3来源:GBin1.com在过去的文章中我们推荐过很多关于Wordpress主题的文章,有兴趣可以点击这里查看到更多。今天,我们要推荐以自由为主风格的16款免费主题,这些充满活力的网站设计一定会让你心动。希望大家喜欢!1. Prospect在线演示 | 更多信息Prospect是一款免费的以商用和投资组合为主题的内容,它是一款看起来非常干净的响应式设计...

linux系统修改主机名会不会影响,在Linux系统中修改主机名_書淺的博客-程序员宅基地

**知识点:linux常用命令方法概要:更改/etc/sysconfig下的network文件,在提示符下输入vi /etc/sysconfig/network,然后将HOSTNAME后面的值改为想要设置的主机名。步骤:1、右键单击桌面,左键单击Open in Terminel 2、输入vi /etc/sysconfig/network(表示编辑文件network),回车 3、按i字母键,进入插入..._linux主机名修改后影响通信么

C语言-顺序栈实现_void stackpop(mystack* obj)和void stackdisplay(myst-程序员宅基地

栈的定义栈:时限定只在表尾进行插入或删除的线性表。所以栈也成为后进先出的线性表表头为栈底,表尾为栈顶,不含元素的空表为空栈顺序栈的实现顺序栈是指利用顺序存储结构实现的栈,即 利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时利用数组下标top指示栈顶元素在顺序栈中的位置。因为C语言中数组下标从0开始,这里以top = -1表示空栈。顺序栈的数据结构:#define maxStackNum 100typedef struct{ int* data; //栈元素指针 int to_void stackpop(mystack* obj)和void stackdisplay(mystack* obj)

汇编错误信息_improper operand type汇编-程序员宅基地

文章目录Already defined locallyAlready had ELSE clauseAlready have base registerAlready have index registerBlock nesting errorByte register is illegalCan't override ES segmentCan't reach with segment regCan't use EVEN on BYTE segmentConstant was expectedCS reg_improper operand type汇编

执行 taro init myApp 报错 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\taro.ps1-程序员宅基地

执行 taro init myApp 报错无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\taro.ps1,因为在此系统上禁止运行脚本。taro : 无法加载文件 C:\Users\小迈\AppData\Roaming\npm\taro.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置

随便推点

python-调用API接口移除照片背景,分分钟变抠图高手_图片白底api-程序员宅基地

平时生活工作中,会遇到去掉照片背景的需求,如果你是PS高手,可以用ps解决,如果不是呢,或者对去背景的要求不高,还有一些电商平台,产品图必须是白底的,怎么才能快速批量处理呢,一个一个抠图,太慢了。会了python后,调用removebg接口,分分钟帮你去掉大量照片背景。_图片白底api

预测控制matlab程序,预测控制matlab程序-程序员宅基地

MATLAB 模型预测控制工具箱函数 8.2 系统模型建立与转换函数前面读者论坛了利用系统输入/输出数据进行系统模型辨识的有关函数及使用方 法,为时行模型预测控制器的......MATLAB 模型预测控制工具箱函数 8.2 系统模型建立与转换函数 前面读者论坛了利用系统输入/输出数据进行系统模型辨识的有关函数及使用 方法,为时行模型预测控制器的......T-S模糊辨识与广义预测控制(GPC)MA..._gpc广义预测控制仿真matlab

NSAttributedString 详解-程序员宅基地

转载地址:http://www.cnblogs.com/zhw511006/archive/2012/09/21/2696700.html首先导入CoreText.framework,并在需要使用的文件中导入:#import创建一个NSMutableAttributedString:NSMutableAttributedString *attri

机器学习优化问题-经验风险、期望风险、结构风险-程序员宅基地

要区分这三个概念,需要先讲一下损失函数L(Y,f(x))的概念。损失函数:针对单个具体样本,表示模型预测值与真实样本值之间的差距。损失函数越小,说明模型对于该样本预测越准确。常见损失函数有0-1损失函数、平方损失函数、绝对损失函数、对数损失函数(对数似然损失函数)。经验风险:对所有训练样本都求一次损失函数,再累加求平均。即,模型f(x)对训练样本中所有样本的预测能力。...

LeetCode406. 根据身高重建队列(贪心)_根据身高重建队列 贪心-程序员宅基地

假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。示例 1:输入:people = [[7,0],[4.._根据身高重建队列 贪心

推荐文章

热门文章

相关标签