Skip to content

Instantly share code, notes, and snippets.

@islishude
Last active March 6, 2020 02:18
Show Gist options
  • Save islishude/4ce62ee788be0b0a55ea7b44122336c1 to your computer and use it in GitHub Desktop.
Save islishude/4ce62ee788be0b0a55ea7b44122336c1 to your computer and use it in GitHub Desktop.
golang-migrate
package main
import (
"context"
"database/sql"
"flag"
"fmt"
"log"
"time"
_ "github.com/go-sql-driver/mysql"
"github.com/golang-migrate/migrate"
"github.com/golang-migrate/migrate/database/mysql"
_ "github.com/golang-migrate/migrate/source/file"
)
// MySQL url
var (
dbname string
mysqlUser string
mysqlPasswd string
mysqlHost string
)
func init() {
flag.StringVar(&mysqlUser, "mysqluser", "root", "mysql user")
flag.StringVar(&mysqlPasswd, "mysqlpass", "test", "mysql password")
flag.StringVar(&dbname, "mysqldbname", "btssl", "mysql dbname")
flag.StringVar(&mysqlHost, "mysqlhost", "localhost:3306", "mysql connection host")
flag.Parse()
}
func main() {
connstr := fmt.Sprintf("%s:%s@tcp(%s)/?parseTime=true", mysqlUser, mysqlPasswd, mysqlHost)
db, err := sql.Open("mysql", connstr)
if err != nil {
log.Printf("switch database error: %s", err)
return
}
defer db.Close()
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
// create database
var query = "CREATE DATABASE IF NOT EXISTS " + dbname + " DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;"
if _, err := db.ExecContext(ctx, query); err != nil {
log.Printf("create database error: %s", err)
return
}
// switch database
if _, err := db.ExecContext(ctx, "USE "+dbname); err != nil {
log.Printf("switch database error: %s", err)
return
}
driver, err := mysql.WithInstance(db, &mysql.Config{})
if err != nil {
log.Printf("new mysql instance error: %s", err)
return
}
m, err := migrate.NewWithDatabaseInstance("file://migration", "mysql", driver)
if err != nil {
log.Printf("new migrate error: %s", err)
return
}
if err := m.Force(1); err != nil {
if err != migrate.ErrNoChange {
log.Printf("migrate up error: %s", err)
return
}
}
log.Printf("Success")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment