私と私の猫の他は誰でも隠し事を持っている

野良プログラマ発、日々のアウトプット

データ入りの演習用 MySQL DB を1分で用意する

プログラマやってると、ミドルウェアフレームワーク等を検証したり、チュートリアルを試してみるということは日常的にあるあるな訳ですが、そんな時にゃテンポラリな演習用 DB がちょくちょく必要になりますよね。今回はそんな煩わしい作業を超スピードで片付けよう、という話です(MySQL 限定ですが)。

データの入ったボイラープレート的な DB って誰か作って無いかなーと探してたら、MySQL サイトにちゃんと情報が↓。

f:id:mariyudu:20200427185453p:plain

5種類の DB が紹介されているのですが、今回は「world database」と「employee data」を利用させてもらいます。データが提供されているとは言え、これを手作業でちまちま流し込んでたんじゃ全然時短にならないので、構築済 DB の Docker コンテナでも作るかぁ、と思ったら… もうありましたw やっぱり皆考えることは同じ。では、DB 毎に利用できるようなるまでの手順を。

World Database

世界の都市と利用言語を格納したシンプルな DB です。内容説明とコンテナ提供元はこちら↓。

dev.mysql.com

hub.docker.com

コンテナ生成はこんな感じです↓。

$ docker run -it --name mysql-example-world -e BIND-ADDRESS=0.0.0.0 -p 3306:3306 -e TZ=Asia/Tokyo -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d kakakakakku/mysql-world-database

ホスト側から DB 接続してみます↓。

$ mysql -h 127.0.0.1 -u root world
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.24    |
+-----------+
1 row in set (0.00 sec)

mysql> SHOW TABLES;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+
3 rows in set (0.00 sec)

イイ感じですね。city テーブルには4079件の、country テーブルには239件のレコードが格納されています。ちなみに、下記が ERAlchemy で生成したこの DB の ER 図です。
f:id:mariyudu:20200426165506p:plain

Employee Data

架空の従業員データベースです。テーブル数は8で、中心となる社員テーブル employees には300,024件のレコードと、かなり本格的な内容です。内容説明とコンテナ提供元はこちら↓。

dev.mysql.com

hub.docker.com

コンテナ生成します↓。

$ docker run -it --name mysql-example-employee -e BIND-ADDRESS=0.0.0.0 -p 3306:3306 -e TZ=Asia/Tokyo -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d harrymartland/employees-practice-mysql

ホスト側から DB 接続します↓。

$ mysql -h127.0.0.1 -utest_user -ptest_password employees
mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.1-dmr |
+-----------+
1 row in set (0.00 sec)

mysql> SHOW TABLES;
+----------------------+
| Tables_in_employees  |
+----------------------+
| current_dept_emp     |
| departments          |
| dept_emp             |
| dept_emp_latest_date |
| dept_manager         |
| employees            |
| salaries             |
| titles               |
+----------------------+
8 rows in set (0.01 sec)

これだけの規模だとスケールを意識した作業が出来るのでイイですねー。

以上です。出来合いの接続アカウントを変えたい場合は適宜

GRANT ALL ON yourdb.* TO yourname@'172.17.0.1' IDENTIFIED BY 'yourpassword';

等とすれば良いかと。他3件のデータベースも同じ要領でコンテナ化出来ると思うので、どんどん活用していきましょー。