본문 바로가기
devops/docker

docker-compose mysql 설정 및 sql init

by 아이티.파머 2022. 1. 14.
반응형

docker 와 docker-compose 를 이용하여 쉽게 mysql 을 구성 할 수 있다.

docker-compose.yml 파일

version: '3.1'

services:
  ###################################
  #### DB Mysql
  ###################################
  db:
    #build: .
    image: mysql:5.7.21
    container_name: aereport-mysql
    command: 
            - --default-authentication-plugin=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --range_optimizer_max_mem_size=16777216
    restart: always
    environment:
      MYSQL_DATABASE: test_db
      MYSQL_USER: test
      MYSQL_PASSWORD: test1!@
      MYSQL_ROOT_PASSWORD: test1!@
      TZ: Asia/Seoul
    volumes:
      #- {연결될 실제 물리 folder path}/{docker 안에 folder path}
      - ./mysql/db:/var/lib/mysql
      # OS 볼륨의 타임존을 따라가게 할때 사용한다.
      #- /etc/timezone:/etc/timezone:ro      # ubuntu os
      - /etc/localtime:/etc/localtime:ro     # cent os
      - ./mysql/initdb.d:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306
  ###################################
  #### DB Web Manager
  ###################################
  adminer:
    image: adminer
    container_name: mysql-adminer
    restart: "no"
    ports:
    - 8081:8080
  • image : mysql images 정보
  • ./mysql/db:/var/lib/mysql
    • mysql db가 생성되는 디렉토리 링크
  • environment
    • mysql 접속 정보 및 환경설정 정보
    • TZ : Asia/Seoul
      • mysql 시간 정보지정 아시아 서울
  • ./mysql/initdb.d:/docker-entrypoint-initdb.d
    • sql 파일을 넣어 넣고 initial data를 생성할때 사용한다.
    • container 생성시 알파벳 순서대로 실행 된다.
  • /etc/localtime:/etc/localtime:ro
    • OS 볼륨의 타임존을 따라가게 할때 사용한다. → TZ 설정을 Asia/Seoul 로 지정해도 이상할때 가 있음.
  • ./mysql/conf.d:/etc/mysql/conf.d
    • mysql configuration 정보를 담아 둔다
      [client]
      default-character-set = utf8mb4
      
      [mysql]
      default-character-set = utf8mb4
      
      [mysqld]
      character-set-client-handshake = FALSE
      character-set-server           = utf8mb4
      collation-server               = utf8mb4_unicode_ci
    • ./mysql/conf.d 에 my.cnf 파일을 생성하고 해당 정보를 입려한다.

디렉토리 구조

.
├── README.md
├── docker-compose.yml
├── jenkins
│   ├── Dockerfile
│   └── jenkins_home
└── mysql
    ├── Dockerfile
    ├── conf.d
    │   └── my.cnf
    ├── db
    └── initdb.d
                ├── 1.create_table.sql
        ├── 2.test-init-data.sql
        └── 3.load_data.sql

initdb.d 폴더 안에 컨테이너를 생성하며 같이 생성할 초기 데이터들을 알파벳 순번으로 생성해 준다.

load_data.sql 은 LODA DATA 명령어를 이용하여 불러올 데이터를 정의하는 용도로 사용한다.

create_table.sql

create table ad_group
(
    ad_group_id          varchar(128)  not null comment '광고 그룹 아이디',
    ad_group_name        varchar(1024) not null comment '광고 그룹명',
    start_time           datetime      null comment '시작일시',
    end_time             datetime      null comment '종료일시',
    ad_network_type      varchar(32)   null comment '지면 플랫폼 정보(유트브/검색/앱/페이스북/인스타/배너)',
    status               varchar(32)   null comment '상태 (시작/중지/유효/삭제/일시정지/보관...)',
    campaign_id          varchar(128)  not null comment '캠페인 아이디',
    media_id             varchar(12)   not null comment '미디어 아이디 ( 구글, 페이스북....)',
    custom_id            varchar(32)   null comment '광고계정',
    master_id            varchar(32)   null comment '마스터 아이디',
    objective            varchar(32)   null comment '목표(애드그룹 타입 : 동영상 / 배너 / 검색 )',
    initial_collect_date date          null comment '최초 수집일',
    last_collect_date    date          null comment '최종 수집일',
    primary key (ad_group_id, campaign_id, media_id)
)
    comment '광고 그룹 정보' collate = utf8mb4_bin;

load_data.sql

LOAD DATA INFILE './departments.csv' INTO TABLE departments FIELDS TERMINATED BY ',' (`name`, `priority`);

docker-compose 실행 명령어

docker-compose up -d
반응형