woonizzooni

Docker mysql 설치, DB생성, 테이블생성 예시 본문

Docker

Docker mysql 설치, DB생성, 테이블생성 예시

woonizzooni 2019. 6. 17. 19:10

(참고 : Docker 설치 및 실행 환경은 아래 게시글 참고

  https://woonizzooni.tistory.com/entry/Docker-Toolbox-설치-메모리-확장-디스크-확장-timezone변경)

 

 

1. Kitematic GUI환경에서 MySQL 컨테이너 생성 & 실행 (난 별로)

  1-1. 'Kitematic (Alpha)' 바로가기 실행

        음.. docker와 연결하는 과정 인데, 화면을 캡쳐 못했네...

  1-2. Containers > New > mysql 검색 & 선택

  1-3. CREATE클릭 : MySQL 컨테이너 다운로드 & 실행

 1-4. MySQL 컨테이너 실행상태 확인

 1-5. EXEC버튼을 클릭하여 MySQL 컨테이너 쉘 진입

 

2. CLI 쉘환경에서 MySQL 컨테이너 생성 & 실행

 2-1. docker 실행 쉘 진입  (Windows10 > Docker Toolbox 환경)

   아래 3방법중 편한걸로

      - 명령 프롬프트 실행 (Path에 docker 실행파일 경로가 설정되어 있다는 전제)

      - Docker Quickstart Terminal 실행

      - 터미널로 VM에 ssh로 접속 (id/passwd = docker/tcuser)

 

 2-2. MySQL docker 이미지 다운로드 & Container 실행

    - mysql 데이터 저장용 컨테이너 생성   ※ 공유폴더를 사용하면 안됨!

      $ docker create --name mysqldb_data -v /mnt/sdb1/mysql mysql

 

    - mysql 데이터 저장용 컨테이너를 볼륨으로 마운트하면서 컨테이너 실행

      $ docker run -d -p 3306:3306 --volumes-from mysqldb_data -v /mnt/sdb1/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=비밀번호 --name mysqldb mysql

$ docker create --name mysqldb_data -v /mnt/sdb1/mysql mysql
  Unable to find image 'mysql:latest' locally
  latest: Pulling from library/mysql
  ...
  f864cfdc0264: Pull complete 
  Digest: sha256:415ac63da0ae6725d5aefc9669a1c02f39a00c574fdbc478dfd08db1e97c8f1b
  Status: Downloaded newer image for mysql:latest
  742cd269abd8b9c5dd19039e8d5b9a68329c8f5eccc47a0225aec5e46d9e3eec

$ docker run -d -p 3306:3306 \
  --volumes-from mysqldb_data \
  -v /mnt/sdb1/mysql:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=비밀번호 \
  --name mysqldb \
  mysql

213acd3a395e8e3ae47e00b9633b85315cc2a82df0c3b37fcf695827fc6083af

docker@default:~$ docker ps  
CONTAINER ID  IMAGE  COMMAND                ... STATUS                  PORTS     NAMES
213acd3a395e  mysql  "docker-entrypoint.s…" ... 0.0.0.0:3306->3306/tcp, 33060/tcp mysqldb

docker@default:~$ docker ps -a
CONTAINER ID  IMAGE  COMMAND                ... STATUS                  PORTS     NAMES
213acd3a395e  mysql  "docker-entrypoint.s…" ... 0.0.0.0:3306->3306/tcp, 33060/tcp mysqldb
742cd269abd8  mysql  "docker-entrypoint.s…" ... Created                           mysqldb_data

   - 이후 부터 컨테이너 name이 있는 경우

      $ docker start 컨테이너이름

 

 2-3. MySQL 컨테이너 쉘 진입

    $ docker exec -i -t 컨테이너이름 bash

$ docker exec -i -t mysqldb bash
root@213acd3a395e:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
overlay          18G  486M   17G   3% /
tmpfs            64M     0   64M   0% /dev
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/sda1        18G  486M   17G   3% /etc/hosts
shm              64M     0   64M   0% /dev/shm
/dev/sdb1        98G  235M   93G   1% /var/lib/mysql
tmpfs           2.0G     0  2.0G   0% /proc/asound
tmpfs           2.0G     0  2.0G   0% /proc/acpi
tmpfs           2.0G     0  2.0G   0% /proc/scsi
tmpfs           2.0G     0  2.0G   0% /sys/firmware

 

3. MySQL 접속, DB생성, 테이블 생성 등....

  3.1. CLI쉘 

    - mysql 접속

      root@213acd3a395e:/# mysql -u root -p          <-- (참고) 213acd3a395e : 컨테이너 ID

      Enter password: 비밀번호 입력 

    - DB 조회 & 생성

      mysql> SHOW DATABASES;

      mysql> CREATE TABLE DB명 (testonly)

    - DB선택 & 테이블 생성

      mysql> USE DB명 (testonly)

      mysql> CREATE TABLE 테이블명(컬럼1, 컬럼2, ...

    - 데이터 입력 / 조회 / 삭제 ...

root@f20938fcae0b:/# mysql -u root -p
Enter password: 비밀번호 입력
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 8.0.16 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

mysql> CREATE DATABASE testonly;
Query OK, 1 row affected (0.01 sec)

mysql> USE testonly;
Database changed

mysql> CREATE TABLE customer( 
    ->     customer_id integer not null,
    ->     customer_name varchar(30) not null,
    ->     customer_age integer not null,
    ->     unique(customer_id)
    -> );
Query OK, 0 rows affected (0.05 sec)

mysql> INSERT INTO customer (customer_id, customer_name, customer_age) 
    -> VALUES (1, 'Tester', 40);
Query OK, 1 row affected (0.01 sec)

mysql> SELECT * FROM customer;
+-------------+---------------+--------------+
| customer_id | customer_name | customer_age |
+-------------+---------------+--------------+
|           1 | Tester        |           40 |
+-------------+---------------+--------------+
1 row in set (0.00 sec)

mysql> DELETE FROM customer WHERE customer_id = 0;
Query OK, 0 rows affected (0.00 sec)

    [SQL 참고]

       SQL Tutorial (CREATE DATABASE, CREATE TABLE, INSERT INTO, SELECT, DELETE등 Statement 설명)

       https://www.w3schools.com/sql/default.asp

 

  3.2. GUI 환경

    - MySQL Workbench 설치 & 실행 (혹은 MySQL을 지원하는 SQL GUI Tools for Windows.. )

    - 연결 설정 후 OK

      connection mame :

      hostname : docker VM의 IP, Port : 3306,

      username : root (password: 비밀번호)

    - 연결 후 화면 : GUI환경에서 DB생성, 테이블생성, 데이터 입력/조회 하면 됨.

 

4. MySQL 컨테이너 중지

 4.1 GUI환경

   - Kitematic 화면에서 STOP버튼 클릭 (참고 : 컨테이너의 X버튼은 컨테이너 삭제동작)

   - 재시작

 

 4.2 CLI쉘 환경      

   - docker 실행 쉘에서 stop명령으로 중단

       $ docker stop 컨테이너이름 or 컨테이너ID

   - 다시 시작하고 싶으면 위 '2-2'번부터 수행. 

  

 

5. 한글 깨짐 현상 등 호환 환경 설정

 5.1 위 설정 그대로 일 경우

   - /etc/mysql/conf.d/mysql.cnf : 아래과 같이 설정,

  - 확인은 show variable like 'c%' 혹은 status명령으로 캐릭터셋 설정 내역 확인 (utf8*로 되어있는지)

  - db & table 새로 생성 or alter명령으로 캐릭터셋 설정 변경

     ALTER DATABASE [DB명] DEFAULT CHRACTER SET utf8; 

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

 

 5.2 컨테이너 실행시 옵션 설정

   - https://hub.docker.com/_/mysql : Configuration without a cnf file 참고.

     ex)

       $ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

 

  

Comments