跳到主要内容

生产环境升级指南

支持代码库

本节所述的变更可在支持代码库的 PR #5 中找到。

将生产环境数据库升级为版本化迁移

如果您一直按照本教程操作至此,可能会思考如何将生产环境的数据库实例升级为版本化迁移工作流? 在本地开发时,我们可以直接删除数据库重新开始,但很明显这对生产环境不可行。

与许多其他数据库模式管理工具类似,Atlas 在目标数据库上使用元数据表 来跟踪已应用的迁移。当我们在现有数据库上开始使用 Atlas 时,必须通过某种方式 告知 Atlas 某个版本之前的所有迁移都已被应用。

为说明这一点,让我们尝试在由自动化迁移工作流管理的数据库上运行 Atlas 的 migrate apply 命令, 并使用我们刚创建的迁移目录。请注意,我们使用的连接字符串指向的数据库已存在应用模式实例 (使用 /db 后缀表示连接至 db 数据库)。

atlas migrate apply --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db

Atlas 返回错误:

Error: sql/migrate: connected database is not clean: found table "atlas_schema_revisions" in schema "db". baseline version or allow-dirty is required

此错误符合预期,因为这是我们首次在该数据库上运行 Atlas。但如错误提示所述, 我们需要对数据库进行"基线化"。这意味着需要告知 Atlas 数据库已处于某个特定状态, 该状态与迁移目录中的某个版本相对应。

要解决此问题,我们使用 --baseline 标志告知 Atlas 数据库已处于特定版本:

atlas migrate apply --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db --baseline 20221114165732

Atlas 报告没有需要执行的新迁移:

No migration files to execute

这样好多了!接下来,让我们通过 migrate status 命令验证 Atlas 是否已识别 已应用的迁移:

atlas migrate status --dir file://ent/migrate/migrations --url mysql://root:pass@localhost:3306/db

Atlas 报告:

Migration Status: OK
-- Current Version: 20221114165732
-- Next Version: Already at latest version
-- Executed Files: 1
-- Pending Files: 0

太棒了!我们已成功将项目升级为使用 Atlas 的版本化迁移。

接下来,让我们看看在对 Ent 模式进行变更时,如何为项目添加新的迁移。