升级生产环境
支持的代码仓库
本部分描述的修改可以在支持的代码仓库 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,正如错误所说,我们需要 “基线化(baseline)” 数据库。 它的含义是我们告知 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 模式发生变更是将新的迁移添加到项目中。