我需要在 mysql 中设置此全局配置值,以允许日期字段中的零,自动设置为 docker 映像设置和配置的一部分。
设置全局 sql_mode='ALLOW_INVALID_DATES,NO_ZERO_DATE';
我尝试过的方法都没有成功。
我的环境:
我尝试创建一个文件“sql_mode.cnf”,其中包含
设置全局 sql_mode='ALLOW_INVALID_DATES,NO_ZERO_DATE';
并通过 docker-compose.prod.yml 从 mysql.prod.dockerfile 调用该文件,如下所示,但它不起作用。可能存在文件访问错误问题?
这是正确的方法吗?还有更好的吗
docker-compose.prod.yml(摘录):
mysql:
build:
context: .
dockerfile: mysql.prod.dockerfile
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_DATABASE: database
MYSQL_USER: datauser
MYSQL_PASSWORD: pwd
MYSQL_ROOT_PASSWORD: pwd
networks:
- laravel
mysql.prod.docker文件:
FROM mysql:8.0.32
COPY sql_mode.cnf /etc/mysql/conf.d/
RUN echo "SET GLOBAL sql_mode='ALLOW_INVALID_DATES,NO_ZERO_DATE';" > /docker-entrypoint-initdb.d/init_sql_mode.sql
sql_mode.cnf:
SET GLOBAL sql_mode='ALLOW_INVALID_DATES,NO_ZERO_DATE';
这是“docker log mysql”输出:
这是运行 docker 的日志。但日期设置中的零没有被占用。为什么?
remote: #3 [internal] load metadata for docker.io/library/mysql:8.0.32
remote: #3 DONE 0.0s
remote:
remote: #4 [1/3] FROM docker.io/library/mysql:8.0.32
remote: #4 CACHED
remote:
remote: #5 [internal] load build context
remote: #5 transferring context: 94B 0.5s done
remote: #5 DONE 0.6s
remote:
remote: #6 [2/3] COPY sql_mode.cnf /etc/mysql/conf.d/
remote: #6 DONE 0.1s
remote:
remote: #7 [3/3] RUN echo "SET GLOBAL sql_mode='ALLOW_INVALID_DATES,NO_ZERO_DATE';" > /docker-entrypoint-initdb.d/init_sql_mode.sql
remote: #7 DONE 0.7s
remote:
remote: #8 exporting to image
remote: #8 exporting layers 0.1s done
为什么这不起作用? 有更好的方法吗?我在网上没有找到任何有关如何设置的指南 - 有吗?
如果有任何帮助,我将非常感激 - 我已经为此工作了好几天了:-)
你可以这样做:
mysql:
build:
context: .
dockerfile: mysql.prod.dockerfile
command: mysqld --sql_mode="ALLOW_INVALID_DATES,NO_ZERO_DATE"
container_name: mysql
ports:
- 3306:3306
environment:
MYSQL_DATABASE: database
MYSQL_USER: datauser
MYSQL_PASSWORD: pwd
MYSQL_ROOT_PASSWORD: pwd
networks:
- laravel
使用默认的 mysql docker 镜像,如下更容易做到:
services:
db:
image: mysql:latest
container_name: db
restart: unless-stopped
ports:
- "3306:3306"
command:
- --sql_mode=ALLOW_INVALID_DATES,NO_ZERO_DATE # Make sure to leave out the double quotes
environment:
MYSQL_DATABASE: database
MYSQL_USER: datauser
MYSQL_PASSWORD: pwd
MYSQL_ROOT_PASSWORD: pwd
networks:
- laravel