MySQL MySQL scripts in docker-entrypoint-initdb are not executed错误
最近遇到一些问题,就是使用 Docker 来部署 MySQL 服务时,在 docker-entrypoint-initdb.d 目录中添加的 SQL 脚本并没有执行成功。经过调查和试错,我总结了一些可能导致这个问题的原因和解决方法。
问题原因:
- 权限问题。在使用 Docker 来部署 MySQL 服务时,需要创建一个自定义的用户,以便在启动容器时指定该用户运行服务器进程。如果该用户没有执行脚本文件的权限,那么这些脚本是不能被执行的。
-
目录问题。必须要把 SQL 脚本放在 docker-entrypoint-initdb.d 目录下,并且必须具有正确的文件扩展名(.sh,.sql 或 .sql.gz)。否则,MySQL 容器将不会运行这些脚本。
解决方法:
阅读更多:MySQL 教程
方法一:给脚本文件添加执行权限
如果你使用了自定义用户启动 MySQL 容器,那么你需要对 SQL 脚本添加执行权限。通过在 Dockerfile 中使用 chmod 指令,可以很容易地解决这个问题,如下所示:
RUN chmod +x /docker-entrypoint-initdb.d/my_script.sh
方法二:检查目录和文件名
如果你确定文件已经具有正确的扩展名,并且已经在 docker-entrypoint-initdb.d 目录下了,那么你可以尝试检查目录是否意外地被重命名,或者文件名是否存在语法错误,如下所示:
docker-entrypoint-initdb.d/mysql-init.sql
总结
总结一下,MySQL 容器在启动时,会从 docker-entrypoint-initdb.d 目录下执行任何 SQL 和 Shell 脚本文件。确保你的 SQL 脚本文件存在该目录下,具有正确的扩展名,且具有可执行权限。如果你的脚本还是不能被执行,请尝试排除目录或文件名称拼写错误,或查看容器或运行时日志是否有相应的错误提示。