Docker容器中运行SQL脚本初始化MariaDB数据库问题排查
Docker部署MariaDB时SQL初始化脚本执行异常的解决过程
问题初始表现
通过Docker Compose部署MariaDB,计划挂载包含DDL和DML的SQL文件初始化库表及数据,挂载配置如下:
volumes: - "./scripts/init.sql:/docker-entrypoint-initdb.d/1.sql"
执行docker-compose up后,仅自动创建了目标数据库,但未生成任何表和数据。
初步排查:简化脚本测试
为排除SQL语法问题,改用仅包含单表DDL的小型脚本测试:
CREATE TABLE `ALARM_A` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `version` bigint(20) NOT NULL, `creation_date` datetime NOT NULL, `is_new` bit(1) NOT NULL, `order_id` bigint(20) NOT NULL, PRIMARY KEY (`id`) )
执行后仍未创建任何表,排除脚本语法错误。
中间阶段:部分表生成异常
调整Docker Compose配置后,表可以生成,但仅创建了3张表(预期59张)。即使删除容器重新创建、重新构建,结果一致。此时完整配置如下:
version: "3.8" services: phedon-service: build: . restart: always ports: - "8080:8080" networks: - phedon depends_on: - mysql env_file: - .env mysql: image: mariadb:10.6 container_name: mariadb volumes: - container-volume:/var/lib/mysql - ./dump.sql:/docker-entrypoint-initdb.d/dump.sql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: name_db ports: - "3307:3307" networks: phedon: volumes: container-volume:
最终解决步骤
确认SQL文件挂载路径(/docker-entrypoint-initdb.d/)及持久化卷配置无误后,执行以下操作:
- 删除已存在的MariaDB持久化卷:由于MariaDB容器首次启动后,
/docker-entrypoint-initdb.d/下的初始化脚本仅执行一次,后续重启不会重复执行,旧卷中残留的初始化状态会干扰新的完整初始化。 - 执行命令彻底清理容器及关联卷:
docker-compose down -v(或单独通过docker volume rm container-volume删除指定卷)。 - 重新启动容器:
docker-compose up --build,此时初始化脚本会完整执行,生成全部59张表及对应数据。
内容的提问来源于stack exchange,提问作者Elen Mouradian
相关产品推荐
相关产品推荐

