golang 版本的migrate資料遷移工具
阿新 • • 發佈:2021-07-30
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_nameforce 20210730160233
二、在專案中使用
go get -ugithub.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) //執行的檔案數 }