golang-migrate

golang-migrate 是一个数据库结构版本管理工具,支持多种数据库,包括 MySQL、PostgreSQL、SQLite、MongoDB、ClickHouse 等。这个工具支持命令行和 Golang API。

安装

MacOS

brew install golang-migrate

其他系统

migrate

命令行使用

创建版本文件

migrate create -ext sql -dir migration -tz Asia/Shanghai init_schema

执行后会生成两个版本文件,分别用于数据库升级和降级。

20230901164900_init_schema.up.sql
20230901164900_init_schema.down.sql 

up.sql 文件内容如下:

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `email` varchar(128) DEFAULT NULL,
  `phone` varchar(16) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

down.sql 文件内容如下:

DROP TABLE IF EXISTS `user`;

查看数据库版本

migrate -path migration -database "mysql://root:123456@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" version

数据库版本升级

# 升级到最新版本
migrate -path migration -database "mysql://root:123456@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" -verbose up

# 升级到指定版本
migrate -path migration -database "mysql://root:123456@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" -verbose up 20230901164900

数据库版本降级

# 全部降级
migrate -path migration -database "mysql://root:123456@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" -verbose down

# 降级到指定版本
migrate -path migration -database "mysql://root:123456@tcp(localhost:3306)/test?charset=utf8mb4&parseTime=True&loc=Local" -verbose down 20230901164900

Golang API 使用

Use in your Go project

参考资料

How to write & run database migration in Golang
wakapi gorm migrations 代码