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

如何在Docker Compose启动时自动创建TiDB数据库messageservice

TiDB容器启动自动创建数据库的Docker Compose配置方案

TiDB官方镜像并不像MySQL那样支持自动执行/docker-entrypoint-initdb.d/目录下的初始化脚本,所以需要通过以下两种方式实现启动时自动创建messageservice数据库:

方法一:使用--init参数直接执行初始化逻辑

这种方式适合简单的初始化需求,可以直接在启动命令中指定SQL语句,或者引用挂载的初始化脚本:

直接执行单条SQL

修改后的docker-compose.yml配置如下:

ti-db:
    image: pingcap/tidb
    container_name: ti-db
    ports:
      - 4000:4000
    logging:
      driver: none
    volumes:
      - ./storage/tidb:/var/lib/mysql
    command: ["--init", "CREATE DATABASE IF NOT EXISTS messageservice;"]

引用外部初始化脚本

如果你的init.sql里包含多条初始化语句,可以先将脚本挂载到容器内,再通过--init参数执行:

ti-db:
    image: pingcap/tidb
    container_name: ti-db
    ports:
      - 4000:4000
    logging:
      driver: none
    volumes:
      - ./storage/tidb:/var/lib/mysql
      - ./dbInit/init.sql:/tmp/init.sql
    command: ["--init", "source /tmp/init.sql;"]

方法二:自定义启动脚本(适合复杂初始化逻辑)

如果需要更复杂的初始化操作(比如创建用户、导入数据等),可以编写自定义启动脚本,挂载到容器后作为启动命令执行:

  1. 创建start-tidb.sh脚本,内容如下:
#!/bin/bash
# 等待TiDB服务启动就绪
sleep 5
# 执行初始化SQL
mysql -h 127.0.0.1 -P 4000 -u root < /tmp/init.sql
# 保持TiDB服务运行
tidb-server
  1. 修改docker-compose.yml配置:
ti-db:
    image: pingcap/tidb
    container_name: ti-db
    ports:
      - 4000:4000
    logging:
      driver: none
    volumes:
      - ./storage/tidb:/var/lib/mysql
      - ./dbInit/init.sql:/tmp/init.sql
      - ./start-tidb.sh:/tmp/start-tidb.sh
    command: ["bash", "/tmp/start-tidb.sh"]

注意:自定义脚本中添加sleep 5是为了确保TiDB服务完全启动后再执行初始化SQL,避免连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 16:00:58