使用 Atlas CLI 声明式管理 MySQL 架构
概述
DevOps 思潮为开发者带来的最佳理念之一就是 “基础设施即代码”(Infrastructure as Code,简称 IaC)。IaC 允许您在特定格式的文件中定义基础设施,并使用自动化工具根据这些文件创建或修改基础设施。但您是否知道,也可以使用类似的方法来管理数据库的架构呢?
Atlas CLI 是一个命令行工具,用于通过将数据库架构的表示形式保存到文件中来帮助管理您的数据库结构。它既可以单独用于管理架构更改,也可以作为 CI/CD 流水线的一部分,用于根据定义文件自动更新架构。在这篇文章中,我们将介绍如何使用 Atlas CLI 生成架构定义文件,并通过该工具更新 PlanetScale 数据库的架构。
要跟随本教程,您需准备以下内容:
- 一个 PlanetScale 帐户。
- 安装并配置好的 PlanetScale CLI。
- 安装并配置好的 Atlas CLI。
设置数据库
首先,使用 PlanetScale CLI 创建一个新的数据库:
pscale database create hotels_db
接下来,为连接新数据库创建一个密码:
pscale password create hotels_db main <YOUR_PASSWORD_NAME>
注意:为密码设置名称可以帮助您在 PlanetScale 仪表板中标识该凭证集。
请记录下以下信息:USERNAME
、ACCESS HOST URL
和 PASSWORD
,因为稍后将会用到。接下来,您需要通过 CLI 进入数据库的 Shell 会话以创建表。运行以下命令进入 Shell:
pscale shell hotels_db main
然后运行以下 SQL 脚本创建一个名为 hotels
的表:
CREATE TABLE hotels( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, address VARCHAR(50) NOT NULL, stars FLOAT(2) UNSIGNED );
生成架构定义文件
Atlas 使得基于现有数据库采用 “Database as Code” 方法变得简单。它通过生成一个表示数据库架构的文件来实现。在生成文件之前,您需要构造一个连接字符串,以便 CLI 可以正确连接到您刚刚创建的 PlanetScale 数据库,使用以下格式生成连接字符串:
"mysql://<USERNAME>:<PASSWORD>@<ACCESS HOST URL>/hotels_db?tls=true"
在本文中,我们将使用 <CONNECTION_STRING>
来代指上述连接字符串。为了根据数据库生成架构文件,运行以下命令:
atlas schema inspect -u <CONNECTION_STRING> > schema.hcl
现在,您应该可以在工作目录中看到一个名为 schema.hcl
的文件。如果查看该文件,内容应该如下所示:可以注意到外部的 table
节点引用了 hotels_db
架构,并且定义了上一节中每列的详细信息。
table "hotels" { schema = schema.hotels_db column "id" { null = false type = int unsigned = true auto_increment = true } column "name" { null = false type = varchar(50) } column "address" { null = false type = varchar(50) } column "stars" { null = true type = float unsigned = true } primary_key { columns = [column.id] } } schema "hotels_db" { charset = "utf8mb4" collate = "utf8mb4_0900_ai_ci" }
修改架构
修改架构仅需更改架构定义文件,并使用 atlas schema apply
命令应用更改即可。现在,我们向 hotels
表添加一个描述列(description
),方法是将以下片段添加至 stars
列与 primary_key
节点之间:
column "description" { null = false type = varchar(100) }
使用连接字符串并引用架构文件,运行以下命令应用更改:
atlas schema apply -u <CONNECTION_STRING> -f schema.hcl
Atlas 将会显示它即将对数据库进行的更改:
-- Planned Changes: -- Modify "hotels" table ALTER TABLE `hotels_db`.`hotels` ADD COLUMN `description` varchar(100) NOT NULL Use the arrow keys to navigate: ↓ ↑ → ← ? Are you sure?: ▸ Apply Abort
按下 Enter
键以确认更改。
更改应用后,可以使用上文提到的 pscale shell
命令进入 Shell,并运行以下命令检查表结构:
DESCRIBE hotels;
您会注意到,表中现在包含了 description
列,该列是通过应用更新后的架构定义文件添加的。
结束语
Atlas 是一个极具价值的工具,可用于丰富您的 DevOps 工具集。它允许您以代码的方式管理数据库架构,而不是通过手动书写 SQL 命令。将数据库架构置于版本控制之下,不仅可以提供操作的可追踪性(例如配置 Atlas 在 Git 操作时应用更改),还可以作为一种历史记录,展示数据库结构随时间的变化。
需要注意的是,当使用 Atlas 配合 PlanetScale 时,确保未开启 “安全迁移”(Safe Migrations)选项,因为启用该选项会阻止您在生产环境中运行 DDL 操作。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接