You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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/)及持久化卷配置无误后,执行以下操作:

  1. 删除已存在的MariaDB持久化卷:由于MariaDB容器首次启动后,/docker-entrypoint-initdb.d/下的初始化脚本仅执行一次,后续重启不会重复执行,旧卷中残留的初始化状态会干扰新的完整初始化。
  2. 执行命令彻底清理容器及关联卷:docker-compose down -v(或单独通过docker volume rm container-volume删除指定卷)。
  3. 重新启动容器:docker-compose up --build,此时初始化脚本会完整执行,生成全部59张表及对应数据。

内容的提问来源于stack exchange,提问作者Elen Mouradian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 03:54:15