SchemaSpyを使って、RDSのTable情報をER図まで自動的に作って欲しい


概要

SchemaSpyを使って、接続先のDBのTable情報を綺麗に抜き取り、あわよくばER図にしてくれるところまでしてほしい

SchemaSpy

GitHub - schemaspy/schemaspy: SchemaSpy code home

やった事

  1. EC2にDockerを追加
  2. SchemaSpy Dockerイメージの取得
  3. schema生成
  4. ローカルにSchemaデータをDL

EC2にDockerを追加

$ sudo yum install -y docker
$ sudo service docker start
# ec2-userがdockerコマンドを実行できるように、ec2-userをdockerグループに入れる
$ sudo usermod -a -G docker ec2-user

SchemaSpy Dockerイメージの取得

$ docker pull schemaspy/schemaspy
# インストール確認
$ docker images

このまま稼働させると、以下のエラーが発生

WARN - Connection Failure
Failed to connect to database URL [jdbc:mysql://mysql:3306/hoge] Unknown system variable 'query_cache_size'

MySQLJDBC ドライバのバージョンを上げれば解決するとのことなので、MySQL手に入れる

$ mkdir -p drivers
$ curl -L https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.16.tar.gz |
    tar xvzf - -C drivers --strip=1 mysql-connector-java-8.0.16/mysql-connector-java-8.0.16.jar

schema生成

まずはDBの各環境変数をexport

$ export DB_HOST={HOST名}
$ export DB_PORT={Port番号}
$ export DB_NAME={DB名}
$ export DB_PASS={DBPass}
$ export DB_USER={DBUser}

Docker起動

$ docker run --rm --net="host" -v "$PWD/schema:/output" -v "$PWD/drivers:/drivers" -u root:root schemaspy/schemaspy:latest -t mysql -host ${DB_HOST}:${DB_PORT} -db ${DB_NAME} -u ${DB_USER} -p ${DB_PASS} -connprops useSSL\\=false -s ${DB_NAME}

ローカルにSchemaデータをDL

まずはEC2先で、SchemaファイルをZip化

$ zip -r schema.zip schema

ローカルに戻り、EC2上のschema.zipを入手する

$ scp -i "$HOME/.ssh/{秘密鍵のPath}" ec2-user@{ipアドレス}:/home/ec2-user/schema.zip ./

Zipファイルを展開し、index.htmlをブラウザで開く

各コード

なるべくシェルでよしなににしたかったので、Gitsでまとめてみた

install_docker.sh: EC2上にDockerを入れる

https://gist.github.com/kaionn/96056d2033d2b4ce409616e526a18388

create_schema.sh : SchemaSpyを用いてSchemaデータを作り、Zip化する (変数入力必須)

https://gist.github.com/kaionn/4d15cbc7ba40e54699c548c84d6cbc31

download_schema.sh:ローカル上からSchemaデータをカレントディレクトリにDL・解凍・index.htmlを展開するところまでやってくれる

https://gist.github.com/kaionn/a796f63811ea5d49b3e30faa2eec0c593

参考サイト

DockerでサクッとDBからER図を作成する - Qiita
【SchemaSpy】手間をかけずにRDS(MySQL)からER図を生成したい - Qiita
Docker でサクッと MySQL 8 からER図を作成する - Qiita