viv*_*nov 6 mysql my.cnf docker docker-compose
我有一个mysql 5.7 docker容器.当我运行mysql命令时:
SELECT now();
Run Code Online (Sandbox Code Playgroud)
它显示了我当前时间-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
Run Code Online (Sandbox Code Playgroud)
当我浏览容器内的文件时,文件custom.cnf就在那里.在该文件中,我尝试了一些我找到的解决方案:
[mysqld]
default_time_zone='Europe/Sofia'
Run Code Online (Sandbox Code Playgroud)
或者是一个不太优雅的妥协解决方案,因为该区域必须每年更换两次(夏季/冬季):
[mysqld]
default_time_zone='+03:00'
Run Code Online (Sandbox Code Playgroud)
但都没有用.我感觉这个文件根本没有被mysql加载,因为如果我尝试将无效配置放在那里也没有任何事情发生(容器正常启动).有什么建议吗?
Tar*_*ani 15
所以你需要Dockerfile在这种情况下使用a 并像下面一样处理它
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
Run Code Online (Sandbox Code Playgroud)
这确保了当mysql容器加载时它将加载所有时区信息.现在您可以使用环境变量来使用它
环境变量
mysqldb:
#image: mysql:5.7.21
build: .
#container_name: mysql_container
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
- TZ=Europe/Sofia
Run Code Online (Sandbox Code Playgroud)
将它与配置文件一起使用是一个问题.当你启动数据库时,它会给你一个错误
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
Run Code Online (Sandbox Code Playgroud)
这是因为它需要已经加载时区.也可以解决这个问题,但是太麻烦了.我将仅使用环境变量,因为这意味着容器启动时已经设置了时区.
Pau*_*and 12
docker容器mariadb:10.3解释TZ环境变量,尽管 docker 镜像的 Readme.md 中没有提到它。就我而言,提供完美的工作价值America\New_York。
小智 6
值应该是
default_time_zone=Europe/Sofia
Run Code Online (Sandbox Code Playgroud)
但这可能会在重新启动 mysql 服务时给您带来这样的错误,因此您应该在编辑 custom.cnf 文件之前使用以下命令。
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9405 次 |
| 最近记录: |