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

如何在重新部署MariaDB Docker容器后自动创建表并插入数据?

如何在重新部署MariaDB Docker容器时自动创建数据表并插入初始数据

MariaDB官方Docker镜像内置了初始化机制,只要把SQL/Shell脚本挂载到容器的/docker-entrypoint-initdb.d/目录,容器第一次启动且数据目录为空时,就会自动按顺序执行这些脚本,实现自动建表和插入初始数据。具体步骤如下:

1. 准备初始化脚本

  • 本地创建一个目录(比如./mariadb-init),专门存放初始化文件。
  • 编写建表SQL脚本,命名为01-create-tables.sql(加数字前缀保证执行顺序):
-- 创建目标数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS my_app_db;
USE my_app_db;

-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL UNIQUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
  • 编写初始数据插入脚本,命名为02-insert-data.sql:
USE my_app_db;

-- 插入测试数据(仅当表为空时执行,避免重复插入)
INSERT INTO users (username, email)
SELECT 'alice', 'alice@example.com'
WHERE NOT EXISTS (SELECT 1 FROM users WHERE username = 'alice');

INSERT INTO users (username, email)
SELECT 'bob', 'bob@example.com'
WHERE NOT EXISTS (SELECT 1 FROM users WHERE username = 'bob');

2. 配置docker-compose.yml

将本地的初始化目录挂载到容器的/docker-entrypoint-initdb.d/路径,同时配置数据库的环境变量:

version: '3.8'
services:
  mariadb:
    image: mariadb:10.11  # 指定具体版本更稳定
    environment:
      MYSQL_ROOT_PASSWORD: your_secure_root_pw
      MYSQL_DATABASE: my_app_db  # 可选,提前创建数据库,和脚本中对应
      MYSQL_USER: app_service_user
      MYSQL_PASSWORD: app_service_pw
    volumes:
      - ./mariadb-data:/var/lib/mysql  # 数据持久化目录,清理时需删除
      - ./mariadb-init:/docker-entrypoint-initdb.d/  # 挂载初始化脚本目录
    ports:
      - "3306:3306"

3. 完全清理并重新部署

要确保脚本能执行,必须保证MariaDB的数据目录是全新的:

  • 停止并删除容器及关联卷:
docker compose down -v
  • 删除本地的./mariadb-data目录(如果之前有持久化数据):
rm -rf ./mariadb-data
  • 启动容器:
docker compose up -d

关键注意事项

  • 初始化脚本仅在容器首次启动且数据目录为空时执行,如果数据目录已有数据,脚本不会重复运行。
  • 脚本执行顺序按文件名的字典序排列,所以用01-、02-前缀可以精准控制执行流程。
  • 也可以使用Shell脚本(需添加执行权限chmod +x script.sh),脚本中可通过环境变量(如${MYSQL_ROOT_PASSWORD})引用compose里配置的参数,灵活执行复杂初始化逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:46:00