LoginSignup
0
0

More than 3 years have passed since last update.

Docker ComposeのMySQLに初期データを設定する

Posted at

初期データ

initdb.dフォルダを作成してinit.sqlpet.txtを配置する。

init.sqlの内容はテーブル削除、作成データ挿入を記述

init.sql
drop table if exists pet;
create table if not exists pet (
       name varchar(20)
       , owner varchar(20)
       , species varchar(20)
       , sex char(1)
       , birth date
       , death date
);
load data local infile '/docker-entrypoint-initdb.d/pet.txt' into table pet;

pet.txtの内容はテーブルに挿入するデータをcsv形式で記述

pet.txt
Fluffy  Harold  cat f   1993-02-04  \N
Claws   Gwen    cat m   1994-03-17  \N
Buffy   Harold  dog f   1989-05-13  \N
Fang    Benny   dog m   1990-08-27  \N
Bowser  Diane   dog m   1979-08-31  1995-07-29
Chirpy  Gwen    bird    f   1998-09-11  \N
Whistler    Gwen    bird    \N  1997-12-09  \N
Slim    Benny   snake   m   1996-04-29  \N

設定

docker-compose.ymlvolumesに初期データフォルダを記述する。
ローカルのinitdb.dフォルダをコンテナ内にdocker-entrypoint-initdb.dフォルダで配置する。
dockerhub - mysql

docker-compose.yml
version: '3.8'

services:
  mysql:
    image: mysql:5.7
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
      - ./initdb.d:/docker-entrypoint-initdb.d
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: my_test
      MYSQL_USER: mysql
      MYSQL_PASSWORD: mysql

volumes:
  db_data: {}

起動

いつも通りにコンテナを起動する。

$ docker-compose up -d

終わり

起動後にデータを入れ直す

コンテナをdown --volumesして再度upすれば良いんだろうけど。。。
別の方法と言うことで、

コンテナ内に入る。

$ docker-compose exec mysql /bin/bash

コンテナ内でmysqlコマンドをバッチモードで実行する。

# mysql -u mysql --password=mysql my_test < /docker-entrypoint-initdb.d/init.sql

コンテナ内から出る。

# exit

ほんとに終わり

0
0
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
0
0