📌

sqldef on docker環境 使い方(mysql)

2021/05/19に公開

概要

https://github.com/k0kubun/sqldef
↑こちらをdocker環境から、ローカルのDBに対して使えるようにするための手順

前提

  • docker、mysqlのインストールは完了しているものとする。

mysqlをdocker環境から操作可能なユーザを作成

※既にユーザが存在する場合はスキップ

  • ターミナルを開き、以下コマンドでmysqlサーバを起動
    mysql.server start

  • 以下コマンドと、mysqlのパスワードを入力しmysqlにログイン
    mysql -u root -p
    altテキスト

  • 以下SQLで、dockerから操作可能なユーザを作成
    ※スクリーンショットの例では、全てのホストに対してアクセス可能なユーザを作成している
    CREATE USER '<任意のユーザ名>'@'<ホスト名>' IDENTIFIED BY '<任意のパスワード>’;
    altテキスト

  • 以下SQLで、作成したユーザに操作権限を設定
    ※スクリーンショットの例では、全てのデータベース、テーブルに対しての全ての操作権限を与えている
    GRANT ALL On <対象のデータベース>.<対象のデータベース> To '<任意のユーザ名>'@'<ホスト名>';
    altテキスト

※ユーザ作成、権限付与に関しては以下を参照
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
    altテキスト

  • docker環境が立ち上がったら別のターミナルを開き、以下コマンドでコンテナに入る
    docker-compose exec mysqldef bash
    altテキスト

ーーーーーーーーーーーーーーーーーーーーーーーーーー ↓↓ここは初回のみ ーーーーーーーーーーーーーーーーーーーーーーーーーー

  • 以下SQLで、対象DBのスキーマを取得
    ※既に既存DBのスキーマが存在する場合はスキップ可
    mysqldef -h docker.for.mac.localhost -P <ポート番号> -u <作成したユーザ名> -p <ユーザ作成の際に設定したパスワード> <対象のデータベース> --export
    altテキスト

  • スキーマ部分を、どこかにコピペしておく
    ※コピペする際「CREATE TABLE」の後に「IF NOT EXISTS」を追加する(後続処理に必要な為)
    altテキスト

  • ※↑↑スキーマを作成したいデータベース分、スキーマ作成とコピペを繰り返す

  • 以下コマンドでschema.sqlをvimで開き、先ほどの既存スキーマのコピペと、変更したい内容を記載して保存する
    vi schema.sql
    altテキスト

ーーーーーーーーーーーーーーーーーーーーーーーーーー ↑↑ここは初回のみ ーーーーーーーーーーーーーーーーーーーーーーーーーー

  • 以下コマンドでschema.sqlをvimで開き、変更したい内容を記載して保存する
    vi schema.sql
    altテキスト

※上記のスクリーンショットでは①test2テーブルの追加 ②userテーブルにhobbyカラムの追加 を行う
 基本的にテーブルの作成やカラムの変更などは、sqlを発行するのでは無く、変更したい内容をschema.sqlに直接記載する。

  • 以下コマンドでschema.sqlに記載した変更内容の確認(dry runが走る)
    mysqldef -h docker.for.mac.localhost -P <ポート番号> -u <作成したユーザ名> -p <ユーザ作成の際に設定したパスワード> <対象のデータベース> --dry-run < schema.sql
    altテキスト

  • 変更内容に問題が無ければ --dry-run を外してローカルDBに反映
    mysqldef -h docker.for.mac.localhost -P <ポート番号> -u <作成したユーザ名> -p <ユーザ作成の際に設定したパスワード> <対象のデータベース> < schema.sql
    altテキスト

  • ターミナルやGUIで、変更が反映された事を確認
    altテキスト

  • 完了次第、別ターミナルで以下コマンドを入力しmysqlサーバを終了
    mysql.server stop

参考

  • mysqldefで出来る操作一覧
    altテキスト

  • mysqldefコマンドのオプション一覧
    altテキスト

Discussion