mysql的docker时区问题

检查时区

mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+

设置时区

直接安装mysql下,默认取系统时区基本不需要配置,除非要指定其他时区

1、命令行

设置MySQL时间为北京时间

mysql> set global time_zone = '+8:00';
Query OK, 0 rows affected
mysql> set time_zone = '+8:00';
Query OK, 0 rows affected
mysql> flush privileges; 
Query OK, 0 rows affected
mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+
mysql> SELECT NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2022-07-19 18:57:35 |
+---------------------+
1 row in set

2、配置文件

MySQL的配置文件:my.cnf(Linux)或 my.ini(Windows)。 打开配置文件,在 [mysqld] 部分添加以下行:

[mysqld]
default-time-zone='Asia/Shanghai'

3、docker模式

查看 Mysql 时区配置属性。

show variables like '%time_zone%';
​
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | SYSTEM |
+------------------+--------+
​

查看 Docker 容器系统所处时区。

date -R
# Result:
Mon, 15 May 2023 15:50:42 +0000

创建 Mysql 容器时忘记选择时区,这时 Docker 会默认给选择 UTC 时区。 Docker 容器所在的系统的默认时区为 +0000。 Mysql 配置文件添加 default-time_zone=‘+8:00’ 后,重启 Mysql 容器时区设置无效,分析 Mysql 服务强制使用其所在容器系统的时区。

解决方案

第一种方法:

通过修改 Mysql 的 Variables 属性,临时修改,重启后无效。

# 进入容器
docker exec -it mysql1 /bin/bash
​
# 连接 mysql 服务
mysql -uroot -p
​
# 设置全局会话时区
set global time_zone = '+08:00';
​
# 设置当前会话时区
set session time_zone = '+08:00';
​
# 设置后查看 Mysql 时区配置属性。
show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | UTC    |
| time_zone        | +08:00 |
+------------------+--------+
​

第二种方式:

通过修改 Docker 容器所使用的时区,永久修改。

# 进入容器
docker exec -it mysql1 /bin/bash
​
# 下列方法 1~3 中任选其一即可:
# 1.强制生成 Asia/Shanghai 时区文件软链接
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 2.Asia/Shanghai 软链接实际指向 PRC 文件,将其复制为 localtime 时区文件
cp /usr/share/zoneinfo/PRC /etc/localtime
# 3.通过 tzselect 命令,可选择 Beijing、HongKong 城市时区
tzselect 
​
# 修改后查看当前容器时区
date -R
Mon, 15 May 2023 23:05:49 +0800
​
# 连接 mysql 服务
mysql -uroot -p
# 设置后查看 Mysql 时区配置属性。
show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+

第三种方式:

dockerr命令或docer-compse 命令重新生成,指定时区

#群晖 docker compose
version: '3.7'
services:
  app:
    image: mysql:latest
    container_name: chris_mysql
    restart: always
    network_mode: bridge
    ports:
      - 3306:3306
    #  - 33060:33060
    environment:
      - MYSQL_ROOT_PASSWORD=xxxxX
      #重要,指定时区,否则mysql强制按docker时区,改my.cnf也没有用
      - TZ=Asia/Shanghai
    volumes:
      - "/volume1/docker/mysql/conf:/etc/mysql/conf.d"
      - "/volume1/docker/mysql/log:/var/log/mysql"
      - "/volume1/docker/mysql/mysql-files:/var/lib/mysql-files"
      - "/volume1/docker/mysql/data:/var/lib/mysql"
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值