golang-migrate
golang-migrate 是一个数据库结构版本管理工具,支持多种数据库,包括 MySQL、PostgreSQL、SQLite、MongoDB、ClickHouse 等。这个工具支持命令行和 Golang API。
安装
MacOS
brew install golang-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 使用
参考资料
How to write & run database migration in Golang
wakapi gorm migrations 代码