通过docker-compose启动MySQL容器后数据库存在但无表的问题
问题原因
MySQL官方镜像仅会自动执行/docker-entrypoint-initdb.d/目录下的.sql、.sql.gz或.sh格式初始化脚本。你当前将init.sql挂载到了/data/application/init.sql,该路径不在镜像的自动执行范围内,因此脚本中的建表语句并未被执行。而QUARTZ_SCHEMA数据库是通过环境变量MYSQL_DATABASE自动创建的,所以能看到数据库但无任何表。
解决方案
修改docker-compose.yaml中的挂载路径,将初始化脚本放到镜像指定的目录:
services: mysql: image: mysql:oraclelinux9 container_name: mysql_quartz ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: QUARTZ_SCHEMA volumes: - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql
额外注意
- 若之前已启动过容器,MySQL会生成初始化标记文件以避免重复执行脚本,需先清理容器及关联数据卷:
docker compose down -v docker compose up -d - 确保本地
init.sql文件权限正常,可执行chmod 644 ./mysql/init.sql调整权限,防止容器内无法读取脚本。
内容的提问来源于stack exchange,提问作者user842225
相关产品推荐
相关产品推荐

