首页 > 其他 > 详细

golang 版本的migrate数据迁移工具

时间:2021-07-30 22:55:17      阅读:30      评论:0      收藏:0      [点我收藏+]

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)  //执行的文件数
}

  

golang 版本的migrate数据迁移工具

原文:https://www.cnblogs.com/super-egg/p/15080547.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!