上文我们介绍了SQLx及SQLite,并介绍了如何使用代码同步迁移数据库。本文介绍Sqlx cli 命令行工具,介绍如何安装、使用,利用其提供的命令实现数据表同步迁移。Java生态中有flyway, sqlx cli 功能类似,利用命令行工具可以和其他语言项目工程一起使用。
数据库迁移是开发和重构应用程序数据库的过程,是应用程序开发过程的一部分。SQLx CLI是Rust crate SQLx的关联命令行实用程序,用于管理此迁移过程。在这篇文章中,我们将看看如何在Ubuntu 22.10上对MySQL使用这个命令行工具。
在尝试了SQLx CLI之后,我想说,我们实际上可以将这个CLI作为一种通用工具来管理用Rust以外的语言编写的应用程序的数据库开发。我真的很喜欢这个CLI。
SQLx CLI 安装
安装openssl
SQLx CLI文档没有提到它,但它似乎确实需要OpenSSL。我只是在尝试安装失败后才发现这个。在Ubuntu 22.10上,第一次安装尝试没有通过,它需要OpenSSL。详细日志请参见Ubuntu 22.10 SQLx CLI Failure Installation logs。
要安装OpenSSL,运行:
$ sudo apt install pkg-config
sqlx cli 安装
我们使用cargo安装SQLx CLI。在哪个目录下运行安装命令并不重要, 在Ubuntu 22.10上, 默认目录为:/home/ username /.cargo/bin/。最好把该目录添加至环境变量中,方便后续在项目中使用。
$ cargo install sqlx-cli
同步迁移数据库
数据库连接
SQLx CLI 使用.env
文件和命令行选项--database-url
。我们稍后将使用.env
文件,我们可以根据应用程序的需要向该文件添加更多运行时信息,.env
文件应该与Cargo.toml文件放在同一个目录中。
我们实际上并不需要一个现有的Rust项目来启动数据库迁移过程。但这里新建项目为了演示迁移过程。
在特定目录下,创建一个新项目sqlx-mysql-migration,并更改到项目目录:
$ cargo new sqlx-mysql-migration
$ cd sqlx-mysql-migration/
创建 .env 文件
在项目根目录下,新建.env 文件,增加数据库连接信息:
DATABASE_URL=mysql://root:passw0rd@localhost:3306/membership
我们以前在其他Rust代码中见过DATABASE_URL的值,在本例中,我们使用membership数据库。
创建数据库
现在我们已经准备好了DATABASE_URL,当然目标MySQL服务器也在运行,我们用以下命令创建数据库:
$ sqlx database create
如果没有问题,就不会有输出。我们应该使用MySQL Workbench来验证数据库是否已经创建。
我们可以删除数据库:
$ sqlx database drop
它会要求确认。同样,我们可以使用MySQL Workbench来验证数据库是否已被删除。请注意,从这一点开始,我们需要数据库存在。
初始化脚本
创建第一个数据库脚本。该命令的格式为:
## $