github地址:https://github.com/golang-migrate/migrate
一、CLI方式使用
需要下载工具:go install -tags ‘mysql‘ github.com/golang-migrate/migrate/v4/cmd/migrate@latest
之后在GOPATH目录下会多一个migrate.exe程序

创建migrate项目,创建migration文件夹(用于存放迁移文件)

在migrate目录下用命令生成要迁移的up和down文件文件
migrate create -ext sql -dir migration create_test_table


文件为空,需要自行补充sql命令
编辑up文件
例如:
CREATE TABLE IF NOT EXISTS test(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
password VARCHAR(40) NOT NULL,
PRIMARY KEY ( id )
);
编辑down文件
例如:
DROP table IF EXISTS test;
运行1个迁移文件:migrate -verbose -source file://migration -database mysql://user:password@tcp(ip:port)/database_name up 1
可以看到:


version 如果-1表示版本脏了,需要加上force 20*****(生成的表前缀) 来强制版本索引,例如:migrate -verbose -source file://migration -database mysql://user:password@tcp(ip:port)/database_name force 20210730160233
二、在项目中使用
go get -u github.com/golang-migrate/migrate
func main() {
db, err := sql.Open("mysql", "user:password@tcp(ip:port)/migrate?multiStatements=true")
if err != nil {
log.Fatal(err)
}
defer db.Close()
driver, err := mysql.WithInstance(db, &mysql.Config{})
if err != nil {
log.Fatal(err)
}
m, err := migrate.NewWithDatabaseInstance(
"file://migration",
"migrate",
driver,
)
if err != nil {
log.Fatal(err)
}
err = m.Up() //or m.Down()
if err != nil {
log.Fatal(err)
}
_ = m.Steps(1) //执行的文件数
}
原文:https://www.cnblogs.com/super-egg/p/15080547.html