概要
SchemaSpyを使って、接続先のDBのTable情報を綺麗に抜き取り、あわよくばER図にしてくれるところまでしてほしい
SchemaSpy
GitHub - schemaspy/schemaspy: SchemaSpy code home
やった事
- EC2にDockerを追加
- SchemaSpy Dockerイメージの取得
- schema生成
- ローカルに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