Docker修改MySQL时区终极版

本文详细介绍了在Docker环境下如何持久性地修改MySQL的时区,包括挂载本地时区、设置环境变量TZ以及修改MySQL配置文件三种方法,并通过docker-compose进行验证,最终推荐使用设置TZ环境变量的方法。

前言

Docker确实是方便。但每次创建Mysql后都头疼,时区问题头疼。今天就专门花时间以及总结一下如何修改。我需要的修改肯定是持久化的,所以临时性的方案就不考虑了。

基础环境

为了保证实验的严谨性,还是申明一下基础环境

  • Centos7
  • Docker1.13
  • mysql:5.7

关于容器运行方式

  • 不用docker run
  • 不用docker compose
  • 使用docker swarm

MySQL时区修改

方法1,挂载 /etc/localtime:/etc/localtime

这种依赖宿主机时区

compose文件

vi docker-mysql.yml mysql

version: '3'
services:
  mysql57:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: xxxxxx
    volumes:
    - mysql:/var/lib/mysql
    - mysql_cnf:/etc/mysql/conf.d
    - /etc/localtime:/etc/localtime
volumes:
  mysql:
  mysql_cnf:

执行 docker stack deploy -c docker-mysql.yml mysql

验证

  • 连接数据库执行SELECT NOW() 测试发现时间正常
  • 连接数据库执行show variables like '%time_zone%'; 发现默认时区CST说明正常了
  • docker ps找到容器id。执行docker exec -it bc75b4576a1d date 发现时间正常

结论

利用挂载localtime的方法,可以从物理意义上修复MySQL的时区问题。即整个运行环境都是正确时区了。

方法1,充分性证明

  • 将compose中 - /etc/localtime:/etc/localtime删除
  • 重新执行一次 docker stack deploy -c docker-mysql.yml mysql
  • 查看时区,发现恢复成UTC时区了

方法2,TZ=Asia/Shanghai环境变量设置

compose文件

vi docker-mysql.yml mysql

version: '3'
services:
  mysql57:
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: xxxxxx
      TZ: Asia/Shanghai
    volumes:
    - mysql:/var/lib/mysql
    - mysql_cnf:/etc/mysql/conf.d
volumes:
  mysql:
  mysql_cnf:

执行 docker stack deploy -c docker-mysql.yml mysql

验证

  • 连接数据库执行SELECT NOW() 测试发现时间正常
  • 连接数据库执行show variables like '%time_zone%'; 发现默认时区CST说明正常了
  • docker ps找到容器id。执行docker exec -it bc75b4576a1d date 发现时间正常

结论

利用修改TZ: Asia/Shanghai的方法,可以从物理意义上修复MySQL的时区问题。即整个运行环境都是正确时区了。

方法3,修改MySQL配置文件

修改配置文件 /var/lib/docker/volumes/mysql_mysql_cnf/_data/docker.cnf

[mysqld]
skip-host-cache
skip-name-resolve
default-time_zone = '+8:00'

这里配置时区+8,按照测试流程正常。

但是需要注意的是容器的更新。最好的是删除旧容器然后更新

结论

不推荐修改配置文件,鬼知道因为系统时间是UTC会发生什么。
推荐方法2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值