修改 Docker 中 MySQL 8 容器时区的问题_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

智能推荐

scratch2.0制作母亲节礼物——电子烟花送给母亲_scratch母亲节作品-程序员宅基地

文章浏览阅读3.3k次,点赞4次,收藏9次。首先,我们先来看一下效果_scratch母亲节作品

投票系统_开源投票系统 github-程序员宅基地

文章浏览阅读686次。package mainimport ( "awesomeProject1/src/github.com/hyperledger/fabric/core/chaincode/shim" "awesomeProject1/src/github.com/hyperledger/fabric/protos/peer" "bytes" "encoding/json" "..._开源投票系统 github

tensorboard一些简单常用的代码_tensorboard代码-程序员宅基地

文章浏览阅读3.9k次。需要再Terminal里面输入tensorboard --logdir logs才能打开Tensorboard# tensorboard --logdir=logs --port=6007 是将端口号改为了6007#一般用到一下几个指令:# 一、打开图片显示图片# writer.add_images("input",imgs,step) 第一个是标签,第二个是图像,注意图像必须是numpy或者tentor类型的,而且必须是通道数在前面,比如RGB三通道的就要是3*w*h#如果通道数在后面,则._tensorboard代码

Java的reverseOrder_reverse是什么意思及其用法-程序员宅基地

文章浏览阅读1.2k次。reverse的音标英 [rɪˈvɜːs]美 [rɪˈvɜːrs]reverse的用法v. 颠倒;彻底转变;使完全相反;撤销,废除(决定、法律等);使反转;使次序颠倒n. 相反的情况(或事物);后面;背面;反面;倒挡adj. 相反的;反面的;反向的;背面的;后面的第三人称单数: reverses 复数: reverses 现在分词: reversing 过去式: reversed 过去分词: re..._reverseorder

java创建一个指定的日期_创建指定日期java Date对象-程序员宅基地

文章浏览阅读1w次。import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Demo {public static void main(String[] args) throws ParseException {//获..._创建一个指定时间用什么语句

Sublime Text3轻量型跨平台C/C++开发环境(上) 安装使用篇_folder_exclude_patterns-程序员宅基地

文章浏览阅读1.6k次。Sublime Text 2和3的对比相比于2,Sublime Text 3就秒启动一项,就压倒性地胜利了。因此在之后的叙述中都以Sublime Text 3为主角。并且3一直在不断的完善更新,具体的差异可参看Sublime Blog.简单的说:ST3支持在项目目录里面寻找变量 提供了对标签页更好地支持(更多的命令和快捷键) 加快了程序运行的速度 更新了API,使用Pytho..._folder_exclude_patterns

随便推点

go mysql slave_go-mysql: a powerful mysql toolset with Go-程序员宅基地

文章浏览阅读60次。go-mysqlA pure go library to handle MySQL network protocol and replication.ReplicationReplication package handles MySQL replication protocol like python-mysql-replication.You can use it as a MySQL sla..._replication.newbinlogsyncer

C/C++头文件一览[转]_c语言头文件换成c++头文件-程序员宅基地

文章浏览阅读236次。C/C++头文件一览 C、传统 C++#include //设定插入点#include //字符处理#include //定义错误码#include //浮点数处理#include //文件输入/输出#include //参数化输入/输出#include

php7如何读取二进制数据,在PHP中读取二进制文件-程序员宅基地

文章浏览阅读307次。在PHP中读取二进制文件2012-10-30[1715]technologyphp次阅读很多时候,数据并不是用文本的方式保存的,这就需要将二进制数据读取出来,还原成我们需要的格式。PHP在二进制处理方面也提供了强大的支持。任务下面以读取并分析一个PNG图像的文件头为例,讲解如何使用PHP读取和分析二进制文件。涉及函数PNG格式简介为了完成任务,下面简单介绍一下PNG文件格式。PNG是一种无损压缩的..._php 查找字符串中的二进制

kettle报错couldn't convert string [1970-01-01 00:00:00] to a date using format [yyyy/MM/dd HH:mm:ss.SS_kettle导出date报错-程序员宅基地

文章浏览阅读1.4w次。kettle报错couldn't convert string [1970-01-01 00:00:00] to a date using format [yyyy/MM/dd HH:mm:ss.SSS]1.报错如下2019/01/08 12:04:18 - 替换NULL值.0 - ERROR (version 8.1.0.0-365, build 8.1.0.0-365 from 2018-..._kettle导出date报错

计算机串口通信的作用,浅谈硬件串口通信基础概念-程序员宅基地

文章浏览阅读922次。串口通信(Serial Communication),是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议。(1)接口标准串口通信的接口标准有很多,有 RS-232C、RS-232、RS-422A、RS-485 等。常用的就是 RS-232 和 RS-485。RS-232 其实是 R..._多串口电脑有什么用途

AndroidStudio使用过程中遇到的bug(持续更新)_run configuration app is not supported in the curr-程序员宅基地

文章浏览阅读2.5w次,点赞7次,收藏18次。转载请注明出处:http://blog.csdn.net/forevercbb/article/details/51037833 由于Google不再支持Eclipse之后,转向Google的亲儿子——AndroidStudio是必然的,但是AndroidStudio的配置以及使用都比Eclipse复杂,不熟悉的情况下经常会遇到一些莫名其妙的问题,导致应用无法正常编译。代码出现的bug可以根据错_run configuration app is not supported in the current project. cannot obtain

推荐文章

热门文章

相关标签