1. 程式人生 > 其它 >golang 版本的migrate資料遷移工具

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_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)  //執行的檔案數
}