组件分享之后端组件——基于Golang实现的数据库迁移工具dbmate

背景

近期正在探索前端、后端、系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题将包含各类语言中的一些常用组件。欢迎大家进行持续关注。

组件基本信息

内容

本节我们分享一个基于Golang实现的数据库迁移工具dbmate,可让您的数据库架构在多个开发人员和生产服务器之间保持同步。

它是一个独立的命令行工具,可与 Go、Node.js、Python、Ruby、PHP 或您用来编写数据库支持的应用程序的任何其他语言或框架一起使用。如果您正在用不同的语言编写许多服务,并且希望使用一致的开发工具保持一定的理智,这将特别有用。

其具体特征如下:

  • 支持 MySQL、PostgreSQL、SQLite 和 ClickHouse。
  • 使用纯 SQL 编写模式迁移。
  • 迁移是时间戳版本的,以避免与多个开发人员发生版本号冲突。
  • 迁移在事务中以原子方式运行。
  • 支持创建和删除数据库(在开发/测试中很方便)。
  • 支持保存schema.sql文件以轻松区分 git 中的架构更改。
  • 数据库连接 URL 使用环境变量定义(DATABASE_URL默认情况下),或在命令行中指定。
  • 内置支持从.env文件中读取环境变量。
  • 易于分发,单个独立的二进制文件。

安装方式如下:
1、mac安装

brew install dbmate

2、linux安装

sudo curl -fsSL -o /usr/local/bin/dbmate https://github.com/amacneil/dbmate/releases/latest/download/dbmate-linux-amd64
sudo chmod +x /usr/local/bin/dbmate

3、docker安装

docker run --rm -it --network=host -v "$(pwd)/db:/db" ghcr.io/amacneil/dbmate:1 new create_users_table

4、windows安装
下载

命令介绍如下:

dbmate --help    # print usage help
dbmate new       # generate a new migration file
dbmate up        # create the database (if it does not already exist) and run any pending migrations
dbmate create    # create the database
dbmate drop      # drop the database
dbmate migrate   # run any pending migrations
dbmate rollback  # roll back the most recent migration
dbmate down      # alias for rollback
dbmate status    # show the status of all migrations (supports --exit-code and --quiet)
dbmate dump      # write the database schema.sql file
dbmate wait      # wait for the database server to become available

命令行选项
以下选项适用于所有命令。您必须按顺序使用命令行参数dbmate [global options] command [command options]。大多数选项也可以通过环境变量进行配置(并从您的.env文件中加载,这有助于在团队成员之间共享配置)。

--url, -u "protocol://host:port/dbname"- 直接指定数据库 url。(环境:)$DATABASE_URL
--env, -e "DATABASE_URL"- 指定一个环境变量来读取数据库连接 URL。
--migrations-dir, -d "./db/migrations"- 保存迁移文件的位置。(环境:)$DBMATE_MIGRATIONS_DIR
--migrations-table "schema_migrations"- 用于记录迁移的数据库表。 (环境:)$DBMATE_MIGRATIONS_TABLE
--schema-file, -s "./db/schema.sql"- 保存 schema.sql 文件的路径。(环境:)$DBMATE_SCHEMA_FILE
--no-dump-schema- 不要在 migrate/rollback (env: $DBMATE_NO_DUMP_SCHEMA)时自动更新 schema.sql 文件
--wait- 在执行后续命令(env: )之前等待 db 变为可用$DBMATE_WAIT
--wait-timeout 60s- --wait 标志超时(环境$DBMATE_WAIT_TIMEOUT:)

具体使用方式可以参见该文档

本文声明:

知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。