你好!非常感谢 @lysonober 的指正,Dify 确实在 v1.10.1 及更高版本中引入了对 MySQL 协议数据库(包括 OceanBase/SeekDB)的支持。我为之前提供的信息过时感到抱歉。
针对你最新的配置和报错情况,问题很可能出在 DB_TYPE=seekdb 这个配置值上。
原因分析
Dify 使用 SQLAlchemy 作为 ORM 框架。虽然你使用的是 SeekDB,但在 Dify 的配置文件中,为了让系统正确加载 MySQL 驱动(pymysql)和方言,DB_TYPE 必须设置为 mysql。
当配置为 seekdb 这种非标准值时,Dify 可能无法识别数据库类型,导致初始化时的数据库迁移脚本(Migration)被跳过或执行失败,因此数据库连接成功了(能看到连接记录),但核心业务表(如 workflow_schedule_plans)却没有被创建。
解决方案
请尝试以下步骤修正配置并初始化数据库:
1. 修改 .env 配置
将 DB_TYPE 修改为 mysql:
# 修改前
# DB_TYPE=seekdb
# 修改后
DB_TYPE=mysql
# 其他保持不变
DB_USERNAME=root
DB_PASSWORD=seekdb
DB_HOST=X.X.X.X
DB_PORT=2887
DB_DATABASE=test
2. 重启并检查
修改后重启 Dify 服务:
docker compose down
docker compose up -d
3. 手动执行迁移(如果重启后仍报错)
如果重启后表依然没有创建,可能是因为之前的错误状态导致自动迁移未触发。建议手动运行迁移命令,这样也能看到具体的报错细节:
# 1. 进入 API 容器(请确认你的容器名为 docker-api-1 或 dify-api-1)
docker exec -it docker-api-1 /bin/bash
# 2. 手动执行数据库升级
flask db upgrade
- 如果成功:你会看到一系列
Running upgrade ...日志,执行完成后表结构即创建完毕。 - 如果失败:请贴出
flask db upgrade的报错日志,这有助于判断是否是 SeekDB 对某些特定 SQL 语法的兼容性问题。
文档参考:
- 环境变量说明:在 v1.10.1+ 中,
DB_TYPE支持postgres或mysql。
希望这能解决你的问题!