mysql://user:password@tcp(host:port)/dbname?query
URL Query | WithInstance Config | Description |
---|---|---|
x-migrations-table |
MigrationsTable |
Name of the migrations table |
x-no-lock |
NoLock |
Set to true to skip GET_LOCK /RELEASE_LOCK statements. Useful for multi-master MySQL flavors. Only run migrations from one host when this is enabled. |
dbname |
DatabaseName |
The name of the database to connect to |
user |
The user to sign in as | |
password |
The user's password | |
host |
The host to connect to. | |
port |
The port to bind to. | |
tls |
TLS / SSL encrypted connection parameter; see go-sql-driver. Use any name (e.g. migrate ) if you want to use a custom TLS config (x-tls- queries). |
|
x-tls-ca |
The location of the CA (certificate authority) file. | |
x-tls-cert |
The location of the client certicicate file. Must be used with x-tls-key . |
|
x-tls-key |
The location of the private key file. Must be used with x-tls-cert . |
|
x-tls-insecure-skip-verify |
Whether or not to use SSL (true|false) |
If you use the MySQL driver with existing database client, you must create the client with parameter multiStatements=true
:
package main
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/mysql"
_ "github.com/golang-migrate/migrate/v4/source/file"
)
func main() {
db, _ := sql.Open("mysql", "user:password@tcp(host:port)/dbname?multiStatements=true")
driver, _ := mysql.WithInstance(db, &mysql.Config{})
m, _ := migrate.NewWithDatabaseInstance(
"file:///migrations",
"mysql",
driver,
)
m.Steps(2)
}
- Write down the current migration version from schema_migrations
DROP TABLE schema_migrations
- Wrap your existing migrations in transactions (BEGIN/COMMIT) if you use multiple statements within one migration.
- Download and install the latest migrate version.
- Force the current migration version with
migrate force <current_version>
.