sqldef on docker環境 使い方(mysql)
概要
https://github.com/k0kubun/sqldef
↑こちらをdocker環境から、ローカルのDBに対して使えるようにするための手順
前提
- docker、mysqlのインストールは完了しているものとする。
mysqlをdocker環境から操作可能なユーザを作成
※既にユーザが存在する場合はスキップ
-
ターミナルを開き、以下コマンドでmysqlサーバを起動
mysql.server start
-
以下コマンドと、mysqlのパスワードを入力しmysqlにログイン
mysql -u root -p
-
以下SQLで、dockerから操作可能なユーザを作成
※スクリーンショットの例では、全てのホストに対してアクセス可能なユーザを作成している
CREATE USER '<任意のユーザ名>'@'<ホスト名>' IDENTIFIED BY '<任意のパスワード>’;
-
以下SQLで、作成したユーザに操作権限を設定
※スクリーンショットの例では、全てのデータベース、テーブルに対しての全ての操作権限を与えている
GRANT ALL On <対象のデータベース>.<対象のデータベース> To '<任意のユーザ名>'@'<ホスト名>';
※ユーザ作成、権限付与に関しては以下を参照
→ https://proengineer.internous.co.jp/content/columnfeature/6638#section100
sqldef(docker環境)からローカルのmysqlのスキーマを管理する
-
ターミナルを開き、以下コマンドでmysqlサーバを起動
※前作業で既にサーバが起動している場合はスキップ
mysql.server start
-
以下のGitHubリポジトリを任意のディレクトリにクローン
→ https://github.com/tatsumi-0729/sqldef-on-docker -
プロジェクト直下でターミナルを開き、以下コマンドでdocker環境を立ち上げる
docker-compose up --build
-
docker環境が立ち上がったら別のターミナルを開き、以下コマンドでコンテナに入る
docker-compose exec mysqldef bash
ーーーーーーーーーーーーーーーーーーーーーーーーーー ↓↓ここは初回のみ ーーーーーーーーーーーーーーーーーーーーーーーーーー
-
以下SQLで、対象DBのスキーマを取得
※既に既存DBのスキーマが存在する場合はスキップ可
mysqldef -h docker.for.mac.localhost -P <ポート番号> -u <作成したユーザ名> -p <ユーザ作成の際に設定したパスワード> <対象のデータベース> --export
-
スキーマ部分を、どこかにコピペしておく
※コピペする際「CREATE TABLE」の後に「IF NOT EXISTS」を追加する(後続処理に必要な為)
-
※↑↑スキーマを作成したいデータベース分、スキーマ作成とコピペを繰り返す
-
以下コマンドでschema.sqlをvimで開き、先ほどの既存スキーマのコピペと、変更したい内容を記載して保存する
vi schema.sql
ーーーーーーーーーーーーーーーーーーーーーーーーーー ↑↑ここは初回のみ ーーーーーーーーーーーーーーーーーーーーーーーーーー
- 以下コマンドでschema.sqlをvimで開き、変更したい内容を記載して保存する
vi schema.sql
※上記のスクリーンショットでは①test2テーブルの追加 ②userテーブルにhobbyカラムの追加 を行う
基本的にテーブルの作成やカラムの変更などは、sqlを発行するのでは無く、変更したい内容をschema.sqlに直接記載する。
-
以下コマンドでschema.sqlに記載した変更内容の確認(dry runが走る)
mysqldef -h docker.for.mac.localhost -P <ポート番号> -u <作成したユーザ名> -p <ユーザ作成の際に設定したパスワード> <対象のデータベース> --dry-run < schema.sql
-
変更内容に問題が無ければ --dry-run を外してローカルDBに反映
mysqldef -h docker.for.mac.localhost -P <ポート番号> -u <作成したユーザ名> -p <ユーザ作成の際に設定したパスワード> <対象のデータベース> < schema.sql
-
ターミナルやGUIで、変更が反映された事を確認
-
完了次第、別ターミナルで以下コマンドを入力しmysqlサーバを終了
mysql.server stop
参考
-
mysqldefで出来る操作一覧
-
mysqldefコマンドのオプション一覧
Discussion