概述
DevOps运动带来的最好的东西之一是基础设施即代码的概念。IaC允许您在特殊格式的文件中定义基础设施,并允许您使用自动化工具基于这些文件创建或修改基础设施。但是您知道您也可以用类似的方法管理数据库模式吗?
Atlas CLI是一个命令行工具,它通过在文件中保存模式的表示来帮助管理数据库的结构。它可以单独用于管理模式更改,也可以作为CI/CD管道的一部分,根据定义文件自动更新模式。在本文中,我们将介绍使用Atlas CLI生成模式定义文件的基础知识,以及使用该工具更新PlanetScale数据库的模式。
要遵循以下原则,你应该具备以下条件:
- PlanetScale帐户。
- 已安装并配置PlanetScale CLI。
- 已安装并配置Atlas CLI
设置数据库
首先使用CLI在PlanetScale中创建一个新数据库。
pscale database create hotels_db
复制
现在创建一个用于连接新数据库的密码。
pscale password create hotels_db main <YOUR_PASSWORD_NAME>
复制
注意:给密码起一个名字可以让您识别PlanetScale仪表板中的凭证集。
注意USERNAME、ACCESS HOST URL和PASSWORD值,因为您将在下一节中用到它们。接下来,需要进入数据库的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通过生成表示数据库模式的文件,使将“数据库作为代码”的方法应用到现有数据库变得很容易。在进行此操作之前,您需要创建一个连接字符串,以便CLI能够正确地连接到上一节中创建的PlanetScale数据库。使用以下格式创建您自己的连接字符串:
"mysql://<USERNAME>:<PASSWORD>@<ACCESS HOST URL>/hotels_db?tls=true"
复制
接下来,本文将使用<CONNECTION_STRING>作为上述连接字符串的引用。要基于上述数据库生成架构文件,请运行以下命令:
atlas schema inspect -u <CONNECTION_STRING> > schema.hcl
复制
现在应该有一个名为schema的文件。工作目录中的hcl。如果您检查它,它应该如下所示。请注意,外部表节点如何包含对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命令应用它。让我们通过在stars列和primary_key节点之间添加以下代码片段,在hotels表中添加一个描述列:
column "description" { null = false type = varchar(100) }
复制
使用连接字符串和对模式的引用运行apply命令hcl文件。
atlas schema apply -u <CONNECTION_STRING> -f schema.hcl
复制
Atlas将向您显示它在应用更新的模式后将对数据库进行的更改。按键盘上的enter键确认更改。
-- 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
复制
应用更改后,可以使用pscale shell(如上所述)并运行以下DESCRIBE命令来检查表:
DESCRIBE hotels;
复制
请注意表现在是如何包含描述列的。该列是在应用模式时由Atlas添加的。
总结
Atlas可以作为一个不可思议的工具添加到你的DevOps工具包中。它帮助您以代码的形式管理数据库,而不是用SQL命令手动管理模式。保持数据库模式的版本化可以让它具有问责性(通过配置Atlas在git操作上应用更改),并提供一个历史参考,以查看数据库结构如何随时间变化。需要注意的一点是,当Atlas与PlanetScale一起使用时,您将需要在非生产分支上使用它,因为DDL在生产分支上是禁用的。
原文标题:Declarative MySQL schemas with Atlas CLI
原文作者:Brian Morrison II
原文地址:https://planetscale.com/blog/declarative-mysql-schemas-with-atlas-cli