Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English | 中文

Flydb 数据飞行兽吉祥物

Flydb

CI Release License: Apache-2.0 Java 8+

Flydb 是面向任意支持 JDBC 驱动的数据库的 Schema 版本化迁移工具:内置主流数据库方言,以国产信创数据库支持为特色,并通过 DatabaseType SPI 扩展小众 JDBC 数据库。

现在,Flydb 0.2 是一个可靠的迁移运行时:migrateinfovalidatebaselinerepairundoclean 等命令,配合并发锁、事务语义、checksum 校验、失败阻断与恢复,内置主流与信创共 8 个数据库方言,并提供 Spring Boot 2/3 starter。长期方向,是让人类与 AI Agent 共用同一套安全的数据库变更能力:Agent 决定“改什么”,Flydb 保证“怎么改是安全的”。各阶段目标与当前进度见路线图

能力边界: Flydb 负责迁移版本、执行安全与数据库方言适配,不会把任意一套厂商 SQL 自动转换成所有数据库语法。存在方言差异时,请按数据库家族维护迁移目录,具体组织方式见多环境自动化指南

为什么选 Flydb

  • 信创数据库一等公民:达梦 DM8、人大金仓 KingbaseES、openGauss、OceanBase、TiDB 与 MySQL、PostgreSQL、Oracle 同为内置方言;CLI 不捆绑厂商驱动,从 drivers/、运行时 classpath 或 Maven 私服外置解析加载,适配不能公开分发的驱动。
  • 零依赖的 Java 8 内核flydb-core 无任何第三方运行时依赖(由 Maven Enforcer 强制),可直接进入任何存量 Java 8 系统;Boot 3 / Java 17 环境使用独立 starter。
  • 对人和 Agent 同样友好:稳定退出码与错误码、--dry-run 预览、非交互可用;发行包随附与 CLI 版本匹配的 Agent Skill 和文档。
  • 安全默认clean 默认禁用且需双重开关;失败迁移阻断后续执行;密码支持环境变量与密码文件,不落命令行、日志和 SQL。

快速上手

前置条件:Java 8 或更高版本、一个已创建的目标数据库,以及与 Java 8 兼容的 JDBC 驱动。

curl -LO https://github.com/zzxCoding/Flydb/releases/download/v0.2.0/flydb-cli-0.2.0.zip
unzip flydb-cli-0.2.0.zip
cd flydb-cli-0.2.0

# 示例:把 mysql-connector-j.jar 放入 drivers/
cp /path/to/mysql-connector-j.jar drivers/

bin/flydb init \
  --url 'jdbc:mysql://127.0.0.1:3306/demo' \
  --user flydb_user \
  --database-type mysql \
  --yes

export FLYDB_PASSWORD='replace-me'
bin/flydb --dry-run migrate
bin/flydb migrate
bin/flydb info
bin/flydb validate

init 会生成 flydb.confdb/migration/V1__init.sqldrivers/README.md,并拒绝覆盖已有文件。密码也可通过 flydb.password=${env:DB_PASSWORD}flydb.password.file=/run/secrets/db_password 提供;明文写入 flydb.password 仅建议本地临时测试。

数据库支持

数据库家族 内置方言 当前验证层级
MySQL 自动化兼容测试;CLI 发行包端到端验证
PostgreSQL 自动化兼容测试
Oracle 自动化契约测试;已在授权真实实例完成 validate、clean、migrate 端到端验证
达梦 DM8 方言与驱动元数据契约测试;真实环境认证待补
人大金仓 KingbaseES 方言与驱动元数据契约测试;真实环境认证待补
openGauss 方言与驱动元数据契约测试;真实环境认证待补
OceanBase 复用 Oracle/MySQL 家族 Oracle 租户已在授权真实实例完成端到端验证;MySQL 租户为轻量兼容测试
TiDB 复用 MySQL 家族 轻量兼容测试;真实环境覆盖持续补充
其他 JDBC 数据库 可扩展 需提供 JDBC 驱动及 DatabaseType SPI 方言实现

每个数据库的驱动、连接、权限和已知限制见数据库上手指南。状态只代表当前验证证据,不代表厂商认证。信创或新型 JDBC 数据库快速接入见 JDBC 数据库快速接入

路线图

  • 可靠的迁移运行时:迁移引擎、8 个内置方言、CLI、Spring Boot starter、Agent Skill、v0.2.0 GitHub Release
  • 开发体验与机器契约:发布与安装渠道、--json 机器输出、CI 集成方案
  • Agent 分发:基于稳定 CLI 契约的 MCP 适配
  • 存量变更智能:影响分析、应用引用扫描、覆盖率与未知项标注
  • Agent 安全变更运行时:Plan → Validate → Risk → Approval → Apply → Verify 协议

路线图代表方向而非交付承诺,详细说明与产品边界见 ROADMAP.md

Agent 使用

Agent 请先阅读仓库根目录的 AGENTS.md,按其指引安装或启用 flydb-cli Skill 后再执行命令;涉及迁移时先执行 validate--dry-run migrate。Skill 是薄编排层,不复制 CLI 手册;命令、配置和错误码细节以 docs/reference 为准,Skill 面向 Claude Code、Codex、Gemini CLI、ZCode 等主流 Agent 复用,格式与安装方式见 flydb-skills

CLI 发行 ZIP 同时包含 AGENTS.mddocs/flydb-skills/,因此只有发行包、没有源码 checkout 时,也能使用与当前 CLI 版本匹配的文档和 Skill;复制 Skill 到 Agent 目录后,应保留发行包路径供其查找这些文档。

给人类用户:让 Agent 自动安装并使用 Flydb Skill

我正在使用 Flydb。请先阅读并遵循 AGENTS.md,然后安装或启用 flydb-cli Skill。安装完成后先确认 bin/flydb version;涉及迁移时先执行 validate--dry-run migrate。不要把密码写入命令、日志或 SQL;未经我明确授权,不要执行会修改数据库的命令。完成后告诉我 Skill 的安装位置和下一步。

在应用中使用

Java API——flydb-core 不依赖特定连接池、日志框架或 JDBC 驱动,由调用方管理 DataSource

Flydb flydb = Flydb.configure()
    .dataSource(dataSource)
    .databaseType("mysql") // 兼容家族或自定义方言建议显式指定
    .locations("classpath:db/migration")
    // .targetVersion("3")
    .load();

flydb.migrate();

Spring Boot 应用选择对应 starter,容器初始化期间执行 migrate,失败会中止应用启动:

<!-- Spring Boot 3.x / Java 17+ -->
<dependency>
  <groupId>com.flydb</groupId>
  <artifactId>flydb-spring-boot-3-starter</artifactId>
  <version>0.2.0</version>
</dependency>

CLI 已通过 GitHub Release 分发;Maven Central 尚未发布。Java API 与 starter 用户当前需从源码构建并安装到本地或企业 Maven 仓库。

Java 8 存量应用改用 flydb-spring-boot-2-starter(Boot 2.7.18;Spring 官方已说明 2.7.18 是 Boot 2.x 最后一个开源支持版本,因此新项目应优先 Boot 3 starter)。默认复用应用主 DataSource;需要权限隔离时设置 flydb.url/user/password,用独立 DDL 账号迁移;flydb.enabled=false 可完全关闭自动装配。可运行示例:Boot 2 示例Boot 3 示例,详见 Spring Boot Starter 设计

命名与配置

V1__create_user.sql       # 版本化迁移,只成功应用一次
V1.1__add_status.sql      # 点分版本号
R__refresh_user_view.sql  # checksum 变化后再次执行
U1__create_user.sql       # 撤销最近一次已应用的 V1

命名变更: R<版本>__...sql 已被禁止并报 FLYDB-2005,不能通过配置关闭。回退脚本请使用 U<版本>__...sql;可重复迁移统一使用不带版本号的 R__...sql

  • 默认位置 filesystem:db/migration,递归扫描所有子目录;init 生成的配置使用绝对位置,避免受 CWD 影响。
  • 配置优先级 CLI 参数 > FLYDB_* 环境变量 > flydb.conf > 内置默认值;配置文件按 --config 指定、当前目录、安装目录 conf/ 的顺序查找;未知的 flydb.* 键直接报错并给出近似建议。
  • SQL 支持 ${key} 占位符,命令行用 -Dkey=value 传入;未定义占位符在执行前报错并指出脚本行号。
  • 退出码:0 成功、1 一般错误、2 校验失败、3 锁冲突或超时、4 配置错误、5 用户中断。
bin/flydb migrate --target-version 3
bin/flydb migrate --start-version 2 --end-version 5
bin/flydb validate
bin/flydb baseline --baseline-version 5
bin/flydb repair
bin/flydb undo
bin/flydb clean --clean-disabled=false --force   # clean 默认禁用;非交互环境需双开关

版本族、目录版本、路径 glob/regex 过滤与目录版本排序是显式启用的高级规则,任何筛选都不会绕过校验或 out-of-order 保护;完整模式与安全约束见配置项参考。命令语义见命令参考,错误码见错误码参考。多数据库、多套测试与生产环境的自动化组织方式见多环境自动化指南

从源码构建

完整 reactor(含 Boot 3)使用 Java 17 构建;Boot 2 starter、Boot 2 示例、core 与 CLI 保持 Java 8 字节码。如果终端通过 shell 函数切换 JDK,可先执行 jdk17

./mvnw verify

CLI 构建产物位于 flydb-cli/target/flydb-cli-0.2.0.zip。core 的 JaCoCo 行覆盖率门禁为 80%,并由 Maven Enforcer 保证零非测试运行时依赖。

本地集成契约默认只启动 MySQL 8;需要显式运行某个 CI 方言项时设置 -Pmysql/-Ppostgresql-Dflydb.integration.database=<dialect>,完整矩阵由 .github/workflows/ci.yml 执行。

发布前检查(阶段 8)
./scripts/check-bytecode.sh 52 \
  flydb-core/target/classes flydb-cli/target/classes \
  flydb-spring-boot-2-starter/target/classes examples/boot2-demo/target/classes
./scripts/check-bytecode.sh 61 \
  flydb-spring-boot-3-starter/target/classes examples/boot3-demo/target/classes
./mvnw -DskipTests deploy \
  -DaltDeploymentRepository=local::file:./target/staging
./scripts/check-release-artifacts.sh target/staging flydb-cli/target

参与贡献

欢迎通过 Issue 和 PR 参与贡献。完整流程见贡献指南;提交前请运行 ./mvnw -B verify 保证测试与覆盖率门禁通过。安全问题请按安全策略私下报告,不要在公开 Issue 中披露漏洞细节。架构与设计文档入口见设计总览

许可证

Apache-2.0。Flydb 自身按 Apache License 2.0 发布;JDBC 驱动由使用者自行获取,并遵守各厂商的许可证与分发条款。发行包同时附带 NOTICE

About

面向 JDBC 数据库的 Schema 版本化迁移工具:Java 8 零依赖内核,内置信创数据库方言,提供安全 CLI、Spring Boot 2/3 Starter 与 Agent Skill。

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages