MySQL – 在docker-entrypoint-initdb中的MySQL脚本未被执行
在使用Docker部署MySQL时,您可能会使用docker-entrypoint-initdb.d
文件夹来提供一些自定义的MySQL脚本来初始化您的数据库。但是有时候您会发现这些脚本并没有被成功执行,本文将为您解决这个问题。
阅读更多:MySQL 教程
问题分析
在使用docker-entrypoint-initdb.d
文件夹时,我们需要将我们的自定义MySQL脚本放置在该文件夹内。但是有时候即使我们已经正确地放置了脚本,在MySQL容器启动时仍然无法执行它们。
我们需要了解MySQL容器在启动时会执行哪些步骤。使用docker inspect
命令查看MySQL容器的元数据,我们可以找到以下的启动选项:
这表示MySQL容器将在启动时首先执行docker-entrypoint.sh
脚本,然后才会执行MySQL的主进程mysqld
。同时,我们也可以在该文件中找到以下代码:
这段代码将会运行所有在/docker-entrypoint-initdb.d
文件夹下的.sh
,.sql
,.sql.gz
后缀的文件。所以当您发现自己的脚本未被执行时,可能是由于以下原因:
- 脚本文件没有正确地放置在
/docker-entrypoint-initdb.d
文件夹下; - 脚本文件的执行权限不正确;
- 脚本文件的后缀名不是
.sh
,.sql
或.sql.gz
;
解决方案
解决这个问题,您需要检查下列几项:
- 检查脚本文件是否正确地放置在
/docker-entrypoint-initdb.d
文件夹下: - 检查脚本文件的执行权限是否正确
- 检查脚本文件的后缀名是否正确,只有
.sh
,.sql
或.sql.gz
后缀的脚本才能被执行
如果以上三项都检查过了,而您的脚本仍然无法被执行,请再次确认您的MySQL镜像是否正确,或者尝试重建容器。
总结
在使用Docker部署MySQL时,我们可以使用docker-entrypoint-initdb.d
文件夹来提供一些自定义的MySQL脚本来初始化我们的数据库。但是如果您的脚本未能被正确执行,请检查上述三项,尤其是文件的后缀名是否正确。