跳转到内容

Atlas:现代化的数据库 Schema 管理工具

Atlas 是 Ariga 公司开源的数据库 Schema 管理工具,支持声明式地管理数据库结构,类似 Terraform 管理基础设施的思路。它解决了传统迁移工具(如 Flyway、Liquibase)中手动编写 SQL 迁移脚本的痛点。

  • 声明式 Schema 管理:定义期望的数据库状态,Atlas 自动计算并执行差异化的 DDL。
  • 版本化迁移:自动生成版本化的 SQL 迁移文件,兼容 Flyway/Liquibase 的工作流。
  • CI/CD 集成:在 CI 中自动检测 Schema 变更、生成迁移脚本,并可作为 PR Comment 展示。
  • 多数据库支持:MySQL、PostgreSQL、SQLite、MariaDB、SQL Server、TiDB 等。
终端窗口
# macOS
brew install ariga/tap/atlas
# Linux
curl -sSf https://atlasgo.sh | sh
# Docker
docker run --rm arigaio/atlas --help

直接告诉 Atlas 你想要什么样的 Schema,它会计算出到达该状态需要的 DDL:

终端窗口
# 将 MySQL 数据库的当前 Schema 与目标 HCL 文件对比
atlas schema apply \
--url "mysql://root:pass@localhost:3306/mydb" \
--to file://schema.hcl \
--dev-url "docker://mysql/8/mydb"

Atlas 会输出计划执行的 DDL 并等待确认,然后执行。

schema.hcl 示例:

table "users" {
schema = schema.mydb
column "id" {
type = int
auto_increment = true
}
column "name" {
type = varchar(255)
}
column "email" {
type = varchar(255)
unique = true
}
primary_key {
columns = [column.id]
}
}
终端窗口
# 将现有数据库的 Schema 导出为 HCL 文件
atlas schema inspect \
--url "mysql://root:pass@localhost:3306/mydb" \
--format '{{ sql . " " }}' > schema.sql

与 Flyway/Liquibase 兼容的版本化迁移工作流:

终端窗口
# 基于 HCL 文件生成版本化迁移 SQL
atlas migrate diff v1.0.0 \
--to file://schema.hcl \
--dev-url "docker://mysql/8/dev" \
--dir "file://migrations"
# 目录结构
# migrations/
# ├── 20240101000000_v1.0.0.sql ← 生成的迁移脚本
# └── atlas.sum ← 校验和文件
name: Schema Check
on: [pull_request]
jobs:
atlas:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ariga/atlas-action@v1
with:
working-directory: db
dir: file://migrations
dev-url: docker://mysql/8/dev

当 PR 中修改了 Schema 定义文件但未更新迁移脚本时,Atlas Action 会自动在 PR 中评论展示缺失的 DDL:

## Migration Check
The migration directory is not in sync with the desired state.
The following SQL statements are needed:
```sql
ALTER TABLE users ADD COLUMN status VARCHAR(20) NOT NULL DEFAULT 'active';
```
维度 Flyway Liquibase Atlas
迁移定义 手写 SQL XML/YAML/JSON/SQL 声明式 HCL(自动生成 SQL)
差异计算 不计算,纯版本对比 不计算 自动计算所需 DDL
CI 集成 无 Schema 变更检查 内置 diff 功能 原生 CI Action
学习成本 低(只需会 SQL) 中(需学变更集语法) 中(需学 HCL Schema 语法)
运行方式 应用启动时自动迁移 应用启动时 / CLI 推荐 CLI + CI

Atlas 不是要完全取代 Flyway/Liquibase。如果你的团队已经习惯手写迁移脚本且流程稳定,继续使用现有方案没问题。Atlas 更适合希望将 Schema 管理“声明式化”和集成到 CI 中的团队。

  1. 将 Schema HCL 文件提交到 Git:作为 Schema 的 Single Source of Truth。
  2. CI 中执行 Schema 检查:确保 PR 中 Schema 变更与迁移脚本同步。
  3. 使用 dev-url 指定临时数据库:Atlas 需要一个临时数据库来计算差异和验证 SQL,生产环境可以使用 Docker 容器作为临时数据库。
  4. 审查自动生成的迁移脚本:虽然 Atlas 生成的 DDL 在逻辑上是正确的,但在生产执行前仍需人工审查(索引命名、LOCK 策略等)。