勉強用メモです.
初めてのSQLを勉強するためにコンテナで環境構築をしました.
実行環境
- WSL
- docker : 20.10.12
- docker-compose : 1.16.1
sakilaデータのダウンロード
本に載っていたリンクにいき,sakila databaseのzipファイルをダウンロードした.
コンテナによる環境構築
- ディレクトリ構造
※data以下はコンテナ起動時に生成される
.
├── mysql
│ └── db
│ ├── data
│ │ ├── my_testdb
│ │ ├── mysql
│ │ ├── performance_schema
│ │ └── sys
│ ├── my.cnf
│ └── sql
└── sakila-db
- sakila-db.zip
解凍して,sakila-data.sql, sakila-schema.sqlをdb/sqlに置く.
data/sqlはdocker-entrypoint-initdb.dとしてマウントするため,data/sqlに*.sqlをおいておくと,初期データとして読み込んでくれる.
sakilaの名前は1-sakila-schema.sqlなどにしておき,sakila-schema.sqlが先に実行されるようにする※.
※sqlファイルはアルファベット順で実行されるため,sakila-data.sqlが先に実行されてしまいsakila databaseの中身が空になってしまう
- ./my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
- ./docker-compose.yml
version: '3'
services:
mysqldb:
image: mysql:5.7
container_name: mysql_container
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: my_testdb
MYSQL_USER: docker
MYSQL_PASSWORD: docker
TZ: 'Asia/Tokyo'
volumes:
- ./mysql/db/data:/var/lib/mysql
- ./mysql/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./mysql/db/sql:/docker-entrypoint-initdb.d #初期データのマウント場所
ports:
- "3306:3306"
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
コンテナ操作
- 起動
docker-compose up -d
- コンテナに入る
docker exec -it <コンテナ名> sh
これで読み書き可能なレイヤを作成して,シェルを起動する.
テーブルの確認
mysql -u root -p
パスワードの入力を求められる.今回はrootユーザーのパスワードはrootに設定してあるので,rootと入力してEnter.
SHOW databases
でテーブルの一覧が確認できる
注意ポイント
- ローカルのMysqlが動いていると,portがかぶって起動できないので,ローカルのMysqlを消すか,portのマッピングを変える.
- dockerコンテナを一度起動したあと,同じdocker-compose.yamlを使っているとvolumeが残ったままになっていて,データベースの初期データ読み込みが行われないので,もし,初期化が行われない場合は,
docker volume ls
でvolumeを確認して,docker volume rm <volume名>
で消してから起動する.
環境構築完了
参考資料
環境構築の際に参考にさせていただきました.ありがとうございます.
https://www.whizz-tech.co.jp/5472/
https://qiita.com/kondo0602/items/ab0a85fb1e731234eb1a
https://qiita.com/enta0701/items/8e1fd797178c372769c7
https://blog.hiros-dot.net/?p=10469#toc4
https://blog.hiros-dot.net/?p=10469
https://qiita.com/TAMIYAN/items/ed9ec892d91e5af962c6