migrate

インストール

https://github.com/golang-migrate/migrate/tree/master/cmd/migrate#installation

brew install golang-migrate

バージョンの確認はここから:
https://github.com/golang-migrate/migrate/releases

VERSION_MIGRATE='v4.4.0'
curl -L "https://github.com/golang-migrate/migrate/releases/download/$VERSION_MIGRATE/migrate.linux-amd64.tar.gz" | tar xvz

# カレントに展開されるので名前を変えてbinに入れる
mv migrate.linux-amd64 migrate
mv migrate /usr/local/bin

使い方(MySQL)

ディレクトリ構成。

migrations
  - 001_initialize.sql.down.sql
  - 001_initialize.sql.up.sql
  - 002_add-user.sql.down.sql
  - 002_add-user.sql.up.sql

mysqlコンテナを立ち上げてデータベースを作成する。

docker run -itd --rm \
    --name mysql \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=password \
    mysql

mysql -h127.0.0.1 -uroot -ppassword -e "create database mydatabase;"

マイグレーションする。

migrate -source file:<migrationファイルのあるディレクトリ> -database "mysql://<user>:<pass>@tcp(<host>:<port>)/<database name>" goto 1

Tips

ユーザ名、パスワードに特殊文字(@など)がある場合

URLエンコードする。 ex): @ -> %40

Ref:
https://github.com/golang-migrate/migrate/issues/77