将时区配置为mysql docker容器

eqqqjvef  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(424)

我有一个mysql 5.7 docker容器。当我运行mysql命令时:

SELECT now();

它显示的时间-3小时到我的当前时间(这是合乎逻辑的)。我想在配置文件中设置时区。遵循中的文档https://hub.docker.com/_/mysql/ 我在我的 docker-compose.yml 文件如下:

mysqldb:
    image: mysql:5.7.21
    container_name: mysql_container
    ports:
      - "3306:3306"
    volumes:
      - ./.docker/etc/mysql/custom.cnf:/etc/mysql/conf.d/custom.cnf

当我浏览容器中的文件时 custom.cnf 有。在该文件中,我尝试了一些解决方案,如:

[mysqld]
default_time_zone='Europe/Sofia'

或者一个折衷的解决方案,不太优雅,因为该区域一年必须更换两次(夏季/冬季):

[mysqld]
default_time_zone='+03:00'

但都不管用。我有一种感觉,这个文件根本不是由mysql加载的,因为如果我尝试将无效的配置放入其中,也不会发生任何事情(容器正常启动)。有什么建议吗?

byqmnocz

byqmnocz1#

值应该是

default_time_zone=Europe/Sofia

检查详细信息
但在重新启动mysql服务时,可能会出现这样的错误,因此在编辑custom.cnf文件之前,应该使用下面的命令。

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
6xfqseft

6xfqseft2#

对我来说,我用的是keramatichttps://kitematic.com configure 通过点击mysql容器general并添加tz,指定当前时间显示列表https://en.wikipedia.org/wiki/list_of_tz_database_time_zones

干杯

dddzy1tm

dddzy1tm3#

所以你需要使用 Dockerfile 在这种情况下,请按如下方式处理

FROM mysql:5.7.21
RUN echo "USE mysql;" > /docker-entrypoint-initdb.d/timezones.sql &&  mysql_tzinfo_to_sql /usr/share/zoneinfo >> /docker-entrypoint-initdb.d/timezones.sql

这确保当mysql容器加载时,它将加载所有时区信息。现在您可以使用环境变量来使用它
环境变量

mysqldb:
    #image: mysql:5.7.21
    build: .
    #container_name: mysql_container
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - TZ=Europe/Sofia

在配置文件中使用它是一个问题。当你启动数据库时,它会给你一个错误

mysqldb_1  | 2018-04-24T12:29:43.169214Z 0 [Warning] InnoDB: New log files created, LSN=45790
mysqldb_1  | 2018-04-24T12:29:43.215187Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
mysqldb_1  | 2018-04-24T12:29:43.281229Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2a87fec6-47bb-11e8-9f1e-0242ac110002.
mysqldb_1  | 2018-04-24T12:29:43.284010Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
mysqldb_1  | 2018-04-24T12:29:43.284404Z 0 [ERROR] Fatal error: Illegal or unknown default time zone 'Europe/Sofia'
mysqldb_1  | 2018-04-24T12:29:43.284567Z 0 [ERROR] Aborting

这是因为它需要时区已经加载。也可以解决这个问题,但麻烦太多了。我将只使用环境变量,因为这意味着当容器启动时,时区已经设置好了。

相关问题