概要
SQLの勉強やバックエンドの勉強、試作など、何かとDBが欲しくなるタイミングはあるが、DBをローカル環境に構築するのは手間がかかるし雑にやるとローカルが汚染されていく…
データ作成にしても1テーブルに数件登録するくらいなら問題ないが、ちゃんと関係性をもった複数のテーブルを定義したり、それぞれにデータを投入しようと思うとやはりツライ…
そこで、MySQLの公式イメージ+公式サンプルデータを利用することで、ローカルを汚さずMySQLを構築したうえでちゃんとしたデータが登録された状態を10分程度で手軽に構築することができる。
サンプルデータは複数種類あるが、今回は従業員や部門など6テーブル400万レコードが登録されたemployeeデータセットを使用する。
動作環境
Windows10 Enterprise(20H2)
Docker 20.10.5
docker-compose 1.28.5
MySQLコンテナの作成と起動
適当な作業ディレクトリで以下のようにdocker-compose.yml
ファイルを作成する。
version: '3'
services:
mysql:
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: dbuser
MYSQL_PASSWORD: dbpass
TZ: 'Asia/Tokyo'
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./mysql/volume:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
ports:
- 13306:3306
作成したファイルがあるディレクトリでdocker-compose
コマンドを実行してMySQLコンテナを起動。
$ docker-compose up -d
以下のようにMySQLコンテナが起動していればOK。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d6a384a122b mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 33060/tcp, 0.0.0.0:13306->3306/tcp mysql
MySQL公式サンプルデータの投入
MySQL :: Other MySQL Documentation のExample Databasesから任意のデータセットをダウンロードする。今回はemployeeデータセットを使うため、上記サイトの内のGitHubへのリンクから最新のリリース(test_db.1.0.7
)をダウンロード。
ダウンロードした圧縮ファイルをMySQLコンテナにコピーする。
$ docker cp test_db-1.0.7.tar.gz mysql_docker:./
ファイルをコンテナ内にコピーしたらターミナルでコンテナに接続してファイルを解凍する。
以降のコマンドはMySQLコンテナ内で実行する。
# MySQLコンテナに接続してbashを起動
$ docker exec -it mysql /bin/bash
# コンテナ内でファイルを解凍 ※以降のコマンドはコンテナ内で実行
$ tar -zxvf test_db-1.0.7.tar.gz
解凍して生まれたフォルダに移動してファイルをMySQLに流し込む。
$ cd test_db
$ mysql -u root -p < employee.sql
エラーなく終了したらDBに接続して確認する。
$ mysql -u root -p
DB一覧を表示。employeesデータベースが存在すれば登録成功している。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| employees |
| mysql |
| performance_schema |
| sys |
+--------------------+
動作確認としてemployeesデータベースから適当に検索してみる。
mysql> use employees;
mysql> show tables;
+----------------------+
| Tables_in_employees |
+----------------------+
| current_dept_emp |
| departments |
| dept_emp |
| dept_emp_latest_date |
| dept_manager |
| employees |
| salaries |
| titles |
+----------------------+
mysql> select * from departments;
+---------+--------------------+
| dept_no | dept_name |
+---------+--------------------+
| d009 | Customer Service |
| d005 | Development |
| d002 | Finance |
| d003 | Human Resources |
| d001 | Marketing |
| d004 | Production |
| d006 | Quality Management |
| d008 | Research |
| d007 | Sales |
+---------+--------------------+
以上。
あとはお好みのクライアントツールからMySQLコンテナ(ここまでの例だとlocalhost:13306
)に接続してSQLの練習台とするなりバックエンドのDBとするなり活用してみてください。