okaryo.log

『初めてのSQL』を進めるためのMySQL環境をDockerで構築する | okaryo.log

『初めてのSQL』を進めるためのMySQL環境をDockerで構築する

    #Docker#DB#MySQL

この記事にはアフィリエイトリンクが含まれています。

はじめに

しばらくの間ずっと設計の勉強をしているが、最近は設計関連でリレーショナルモデルの学習の一環としてDBのインプットをしている。

その教材の一つとして、最近は『初めてのSQL』を読み始めた。

この本ではMySQLを使って解説を進めるようなので、Dockerを使ってその環境構築をすることにした。

レポジトリはこちら↓

サンプルデータをダウンロード

MySQLの公式ページからsakilaというサンプルデータをダウンロードしておく。

環境構築

docker-compose.ymlに環境を記述していく。開発環境なのでパスワードはむき出しだ。

version: '3.1'

services:
  mysql:
    image: mysql:8.0.29
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: sakila
      TZ: 'Asia/Tokyo'
    volumes:
      - ./init:/docker-entrypoint-initdb.d
    ports:
      - '3306:3306'

DockerのMySQLイメージでは、docker-entrypoint-initdb.dにマウントしたディレクリに初期化用のスクリプトなどを置いておくと、コンテナ作成時にそれらを読み込んで実行してくれるらしい。

次に、docker-entrypoint-initdb.dで読み込む初期化ファイルと、先ほどダウンロードした初期データとして流し込むサンプルデータを設定する。

init.shに初期化スクリプトを、./init/sql配下にサンプルデータとスキーマを配置する。

.
├── init
│   ├── init.sh
│   └── sql
│       ├── sakila-data.sql
│       └── sakila-schema.sql

以下のスクリプトでサンプルのスキーマとデータを流し込む。

#!/bin/bash

mysql -u root -proot sakila < "/docker-entrypoint-initdb.d/sql/sakila-schema.sql"

mysql -u root -proot sakila < "/docker-entrypoint-initdb.d/sql/sakila-data.sql"

実行

以下のコマンドを実行するとMySQLサーバーが実行される。一緒にサンプルデータの流し込みも完了した。

docker-compose up -d

コンテナ内からMySQLサーバーに接続するには以下のコマンドでコンテナに入り、

docker-compose run mysql bash

以下のコマンドでサーバーにログインする。

mysql -u root -h host.docker.internal -p

コンテナ内からのログインなので、ホストはhost.docker.internalを指定する(これに気づくのにすごく時間を溶かした)。

この指定をしなかったせいでとSQLサーバーにアクセスできず以下のようなエラーに悩まされ時間が溶けていった。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (99)

おわり

これでできたのは環境構築にすぎない。これから本格的にDBの世界に潜り込んでいきたい。


関連記事
最新記事
プロモーション

This site uses Google Analytics.