🤖

Sakila Sample Database x MySQL on Docker

2023/01/18に公開

Sakila Sample DatabaseはMySQL公式サイトから提供されるSampleデータです。
正直なところ使うケースはそこまでないと思いますが、急にQueryを試したい時やある程度のデータが欲しいときは有効に利用できます。

DB Structure

ここから確認できます。

  • Tables
  • Views
  • Stored Procedures
  • Stored Functions
  • Triggers

の確認ができます。

Usage Examplesも用意されています。

Installation

公式のMySQL Docker Imageとdocker-composeを利用して構築します。
まず、Other MySQL Documentationからsakila databasZipをダウンロードします。

解凍すると、3つのファイルが出てくると思います。

$unzip sakila-db
$ls
sakila-schema.sql sakila-data.sql sakila.mwb

ファイル名を以下のように変更します。

# sakila-schema.sql -> 1.sakila-schema.sql
# sakila-data.sql -> 2.sakila-data.sql
$mv sakila-schema.sql 1.sakila-schema.sql
&& mv sakila-data.sql 2.sakila-data.sql

次、docker-compose.ymlを作成しましょう。

$touch docker-compose.yml
version: '3.2'
services:
  mysql:
    container_name: mysql-sakiladb-sample
    image: mysql:5.7
    platform: linux/x86_64
    volumes:
      - ./initdb:/docker-entrypoint-initdb.d
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: 'Asia/Tokyo'
      LANG: 'ja_JP.UTF-8'
    ports:
      - 3306:3306

MYSQL_ROOT_PASSWORDimageのversionは好みの変更で問題ありません。

ちなみに

    platform: linux/x86_64

はAppleシリコン(M1 or M2)で必要です。

docker-compose.ymlと同じフォルダの中にinitdbという名のフォルダを作成して、↑でダウンロードして用意したファイル3つを移動させます。

$mkdir initdb
$mv 1.sakila-schema.sql 2.sakila-data.sql sakila.mwb initdb
$ls
docker-compose.yml initdb
$ls initdb
1.sakila-schema.sql 2.sakila-data.sql   sakila.mwb

start and test

$docker-compose up -d
$docker exec -it mysql-sakiladb-sample bash

# ここからContainerの内
$mysql -u root -p
# passwordはMYSQL_ROOT_PASSWORDの値です

show databases

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

show tables

mysql> use sakila
mysql> show tables;
+----------------------------+
| Tables_in_sakila           |
+----------------------------+
| actor                      |
| actor_info                 |
| address                    |
| category                   |
| city                       |
| country                    |
| customer                   |
| customer_list              |
| film                       |
| film_actor                 |
| film_category              |
| film_list                  |
| film_text                  |
| inventory                  |
| language                   |
| nicer_but_slower_film_list |
| payment                    |
| rental                     |
| sales_by_film_category     |
| sales_by_store             |
| staff                      |
| staff_list                 |
| store                      |
+----------------------------+
23 rows in set (0.00 sec)

count

mysql> select count(*) from actor;
+----------+
| count(*) |
+----------+
|      200 |
+----------+
1 row in set (0.00 sec)

以上です。

Sakila Sample Database: https://dev.mysql.com/doc/sakila/en/
Sakila Structure: https://dev.mysql.com/doc/sakila/en/sakila-structure.html
Sakila Usage Examples: https://dev.mysql.com/doc/sakila/en/sakila-usage.html
MySQL Docker Image(Official): https://hub.docker.com/_/mysql
Other MySQL Documentation(Official): https://dev.mysql.com/doc/index-other.html

Discussion