docker-entrypoint-initdb.d下的mysql命令未执行

问题描述

在尝试使用Docker来发布MySQL 5.7时,尽管我的Dockerfile中包含了初始化数据库的SQL脚本,但数据库并未被创建。

dockerfile 如下

FROM mysql:5.7  
MAINTAINER zhang
ADD ./db/*.sql /docker-entrypoint-initdb.d/

问题原因

Docker MySQL镜像使用了一个特殊的初始化脚本,该脚本会检查/docker-entrypoint-initdb.d/目录下的SQL文件并在容器启动时执行它们。但是,如果/var/lib/mysql目录(即MySQL的数据目录)已存在并且包含数据库文件(这通常发生在通过挂载卷或持久化数据的情况下),则初始化脚本会跳过/docker-entrypoint-initdb.d/目录下的所有操作。

问题解决

为了解决这个问题,并确保数据库被正确初始化,你需要确保/var/lib/mysql目录在容器启动时是空的,或者不包含任何现有的数据库文件。

步骤 1:备份现有数据(如果适用)

如果/var/lib/mysql目录包含重要的数据库数据,你首先需要备份这些数据。你可以通过复制或打包该目录来完成这一步骤。

步骤 2:删除或清空/var/lib/mysql目录

如果你正在使用Docker Compose或直接在宿主机上运行Docker容器,并且已经将数据卷挂载到/var/lib/mysql,你需要删除或清空该数据卷中的文件

rm -rf ./mysql/data
步骤 3:重新创建容器

一旦你清除了或备份了/var/lib/mysql目录中的数据,你就可以重新创建容器了。这可以通过Docker Compose的docker-compose up命令或使用Docker CLI的docker run命令来完成。

注意事项

在处理生产环境的数据时,请始终谨慎行事,并确保你已经备份了所有重要的数据。
当你重新创建容器时,确保你的Dockerfile和任何相关的配置文件都是最新的,并且包含了所有必要的更改。
如果你使用的是Docker Compose,并且你的配置文件中包含了多个服务,请确保只删除或修改与MySQL服务相关的部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值