6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MySQLの公式サンプルデータを利用して10分でSQL練習環境を作る on Docker

Last updated at Posted at 2021-03-30

概要

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とするなり活用してみてください。

参考

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?