Docker 기반 MySQL 설치하기
- Development/Database
- 2021. 2. 11.
Docker를 사용하여 MySQL을 설치하는 방법을 정리한다.
docker-compose.yml
YAML 파일의 기본 골격을 다음과 같이 작성한다.
version: "3"
services:
db:
image: mysql:8.0.20
container_name: mysql_db
restart: always
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: "${MYSQL_DATABASE}"
MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
MYSQL_USER: "${DB_USER_ID}"
MYSQL_PASSWORD: "${DB_USER_PASSWORD}"
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ${MYSQL_HOME_DIR}/volumes/mysql/:/var/lib/mysql/
파일내 변수로 선언한 내용은
- 직접 yml 파일에 그대로 기록하거나,
- 외부 파일로 쓰되 embed 하거나
- 외부 conf 파일을 파라미터로 넘겨주게 하거나
- 환경 변수로 선언해 두고 실행되게 하거나
- .env에 등록해 두고 사용되게 하는
등의 선택을 할 수 있다.
변수선언
앞으로 실행하려면, .env에 선언해 두는 것이 편할 것이므로 변수에 해당되는 내용을 .env 파일에 다음과 같이 작성한다.
MYSQL_DATABASE=db이름
DB_USER_ID=사용자계정
DB_USER_PASSWORD=사용자계정비밀번호
DB_ROOT_PASSWORD=root계정비밀번호
MYSQL_HOME_DIR=MySQL 설치디렉토리
정상적으로 반영되었는지는 실행전 다음의 명령어로 확인해 보자.
docker-compose config
변수가 제대로 치환되었는지 확인이 가능할 것이다. (잘못 치환되었다면 변수로 표기한 부분이 공백으로 나타남, 변수가 선언되지 않은 것으로 판단하므로)
실행
당장 정상적으로 뜨는지 편하게 보려면, 다음과 같이 실행한다.
docker-compose up
실행하니 다음과 같이 프로세스가 정상적으로 뜨는 것을 확인하였다.
Removing mysql_db
Recreating c8510841ebff_mysql_db ... done
Attaching to mysql_db
mysql_db | 2021-02-06 13:16:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.20-1debian10 started.
mysql_db | 2021-02-06 13:16:35+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
mysql_db | 2021-02-06 13:16:35+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.20-1debian10 started.
mysql_db | 2021-02-06 13:16:35+00:00 [Note] [Entrypoint]: Initializing database files
mysql_db | 2021-02-06T13:16:35.756403Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
mysql_db | 2021-02-06T13:16:35.772364Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.20) initializing of server in progress as process 48
mysql_db | 2021-02-06T13:16:36.002769Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysql_db | 2021-02-06T13:16:36.539425Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql_db | 2021-02-06T13:16:39.647629Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_db | 2021-02-06T13:16:41.818893Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
mysql_db | 2021-02-06 13:16:51+00:00 [Note] [Entrypoint]: Database files initialized
mysql_db | 2021-02-06 13:16:51+00:00 [Note] [Entrypoint]: Starting temporary server
mysql_db | 2021-02-06T13:16:51.853672Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
mysql_db | 2021-02-06T13:16:51.853773Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20) starting as process 95
mysql_db | 2021-02-06T13:16:51.862406Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysql_db | 2021-02-06T13:16:51.887611Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql_db | 2021-02-06T13:16:52.461887Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_db | 2021-02-06T13:16:52.607994Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock'
mysql_db | 2021-02-06T13:16:52.740385Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
mysql_db | 2021-02-06T13:16:52.747451Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
mysql_db | 2021-02-06T13:16:52.793979Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.20' socket: '/var/run/mysqld/mysqld.sock' port: 0 MySQL Community Server - GPL.
mysql_db | 2021-02-06 13:16:52+00:00 [Note] [Entrypoint]: Temporary server started.
mysql_db | Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it.
mysql_db | Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it.
mysql_db | Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it.
mysql_db | Warning: Unable to load '/usr/share/zoneinfo/zone1970.tab' as time zone. Skipping it.
mysql_db | 2021-02-06 13:16:56+00:00 [Note] [Entrypoint]: Creating database mydb
mysql_db | 2021-02-06 13:16:56+00:00 [Note] [Entrypoint]: Creating user dev
mysql_db | 2021-02-06 13:16:56+00:00 [Note] [Entrypoint]: Giving user dev access to schema mydb
mysql_db |
mysql_db | 2021-02-06 13:16:56+00:00 [Note] [Entrypoint]: Stopping temporary server
mysql_db | 2021-02-06T13:16:56.971679Z 14 [System] [MY-013172] [Server] Received SHUTDOWN from user root. Shutting down mysqld (Version: 8.0.20).
mysql_db | 2021-02-06T13:17:00.826675Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.20) MySQL Community Server - GPL.
mysql_db | 2021-02-06 13:17:01+00:00 [Note] [Entrypoint]: Temporary server stopped
mysql_db |
mysql_db | 2021-02-06 13:17:01+00:00 [Note] [Entrypoint]: MySQL init process done. Ready for start up.
mysql_db |
mysql_db | 2021-02-06T13:17:01.952881Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
mysql_db | 2021-02-06T13:17:01.953008Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20) starting as process 1
mysql_db | 2021-02-06T13:17:01.964558Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
mysql_db | 2021-02-06T13:17:01.996127Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
mysql_db | 2021-02-06T13:17:05.134310Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
mysql_db | 2021-02-06T13:17:05.312523Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/var/run/mysqld/mysqlx.sock' bind-address: '::' port: 33060
mysql_db | 2021-02-06T13:17:05.456782Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
mysql_db | 2021-02-06T13:17:05.464997Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.
mysql_db | 2021-02-06T13:17:05.527302Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.20' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server - GPL.
이후 실행에 문제가 없고, 정상 동작이 확인되었다면
-d 옵션을 넣어서 daemon으로 띄우자.
docker-compose up -d
접속 확인
다른 터미널 창을 열어, contianer 밖에서도 정상 접속되는지 확인하자.
$ telnet 127.0.0.1 3306
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
J
7;IWfq U��dFP`tq9esfuycaching_sha2_password^]
telnet> quit
Connection closed.
이제, SQL Client로 실제 접속까지 테스트해 본다. 앞서, .env에 적어뒀던 User ID/Password 조합을 사용해 접속해보자. 나의 경우는, DataGrip을 사용하였다.
이와 같이, Host, Port, User, Password 등 기본 정보를 입력하고 접속해 보자.
show databases;
환경설정 파일에 작성한 내 스키마(mydb)가 정상 조회되는 것을 확인할 수 있다.
use mydb;
show tables;
아직은 생성한 테이블이 없으므로, 테이블 내용은 조회할 수 있는 것은 없는 상태이다.
이제 기본적인 설정은 마쳤다. 로컬 개발을 하거나, 기본적인 테스트를 할 수 있는 준비는 되었다고 볼 수 있다.
참고
'Development > Database' 카테고리의 다른 글
DB 트랜잭션 - 격리수준(Transaction Isolation Level) (0) | 2021.03.07 |
---|---|
맥북에 psql 설치하기 (postgresql client) (0) | 2021.03.06 |
MySQL 쿼리 타임아웃 설정 - MAX_EXECUTION_TIME (0) | 2021.02.28 |
MySQL information_schema로 세부 정보 확인하기 (0) | 2021.02.13 |
쿼리로 테이블 이름 조회하기 - MySQL, PostgreSQL, Oracle, MS-SQL (1) | 2020.12.02 |
DB 설치하지 않고 간편하게 온라인으로 SQL Query 실행해 보기 (0) | 2020.11.29 |
[oracle] 사용자 조회/ 비밀번호 변경하기 (0) | 2010.09.09 |
set names euckr (0) | 2009.09.11 |