golang 版本的migrate數據遷移工具


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

 
         
import (
"database/sql"
"fmt"
"github.com/golang-migrate/migrate"
"github.com/golang-migrate/migrate/database/mysql"
_ "github.com/go-sql-driver/mysql"
_ "github.com/golang-migrate/migrate/database/mysql"
_ "github.com/golang-migrate/migrate/source/github"
_ "github.com/golang-migrate/migrate/source/file"
)

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)  //執行的文件數 }

  切記要注意import包,否則報錯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM