Repolode
golang-migrate

golang-migrate/migrate

基于 Go 的数据库迁移工具,提供 CLI 和库,按顺序将结构变更应用到多种数据库。

Star
18,983
Fork
1,618
未关闭 Issue
492
最近提交
上个月

这是什么?

migrate 从本地文件系统、S3、GitHub 等来源读取带版本号的迁移文件,并按顺序应用到目标数据库。每次迁移包含 up 和 down 两个文件,既可以向前执行,也可以回滚。数据库驱动负责具体执行,排序和状态管理等核心逻辑则集中在主程序中。

支持的数据库包括 PostgreSQL、MySQL/MariaDB、SQLite、MongoDB、Cassandra、Neo4j、Google Cloud Spanner、CockroachDB、ClickHouse 和 SQL Server 等。迁移来源可以是文件路径、io/fs、嵌入的二进制数据,也可以是 GitHub、GitLab、Bitbucket、AWS S3 或 Google Cloud Storage。

既可以作为独立命令行工具使用,也可以通过官方 Docker 镜像运行,或作为 Go 库引入项目。作为库使用时可以复用已有的数据库连接和自定义日志,并支持优雅停止,以减少迁移中途中断导致的数据损坏风险。

核心功能

  • 01按版本号顺序执行 up 和 down 迁移文件。
  • 02支持 PostgreSQL、MySQL、SQLite、MongoDB、Spanner 等多种数据库。
  • 03可从文件系统、嵌入数据、Git 托管平台和云存储读取迁移。
  • 04提供命令行工具、Docker 镜像和 Go 库三种使用方式。
  • 05作为库使用时可复用已有数据库客户端和自定义日志。

适用场景

  • 为基于 PostgreSQL 或 MySQL 的 Go 服务管理版本化的表结构变更。
  • 在 CI/CD 或容器部署流程中自动执行数据库迁移。
  • 将迁移文件嵌入 Go 二进制文件,随应用一同发布。
  • 用同一工具管理多种数据库引擎的结构变更。

快速上手

  1. 1

    阅读入门指南并按其说明安装命令行工具

  2. 2

    使用 Docker 运行迁移,并替换迁移目录占位符

    docker run -v {{ migration dir }}:/migrations --network host migrate/migrate -path=/migrations/ -database postgres://localhost:5432/database up 2

使用前须知

  • 项目元数据中未明确标注许可证,使用前请先查看仓库的许可证条款。

标签

常见问题

migrate 是什么?
基于 Go 的数据库迁移工具,提供 CLI 和库,按顺序将结构变更应用到多种数据库。 migrate 从本地文件系统、S3、GitHub 等来源读取带版本号的迁移文件,并按顺序应用到目标数据库。每次迁移包含 up 和 down 两个文件,既可以向前执行,也可以回滚。数据库驱动负责具体执行,排序和状态管理等核心逻辑则集中在主程序中。
migrate 可以免费使用吗?用的什么许可证?
migrate 以 Other 许可证开源。用于商业产品前,请先确认许可证条款。
migrate 还在维护吗?
半年内有更新。migrate 最近一次提交是在 2026年9月9日。
migrate 适合用来做什么?
为基于 PostgreSQL 或 MySQL 的 Go 服务管理版本化的表结构变更。 在 CI/CD 或容器部署流程中自动执行数据库迁移。 将迁移文件嵌入 Go 二进制文件,随应用一同发布。 用同一工具管理多种数据库引擎的结构变更。
migrate 怎么安装和运行?
阅读入门指南并按其说明安装命令行工具 使用 Docker 运行迁移,并替换迁移目录占位符: docker run -v {{ migration dir }}:/migrations --network host migrate/migrate -path=/migrations/ -database postgres://localhost:5432/database up 2
在哪里获取 migrate?
源代码和安装说明在 GitHub 上:https://github.com/golang-migrate/migrate

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目