개발 편의성을 위해 마스터 클래스에서 데이터베이스로 AWS RDS
사용을 허가해 주셨습니다.
RDS
는 아니지만, 적어도 직접 편하게 설정하며 실험해보기 좋은 도커 컨테이너를 활용해 mysql 서버를 구동하기로 결정하였습니다.
저희 서버에서 가장 부하가 많을 거라 예상되는, 로그 저장용 Column-Oriented DB의 경우도 같은 서버에서 도커를 활용해 관리할 예정입니다.
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
TZ: Asia/Seoul
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./mysql/conf.d:/etc/mysql/conf.d
- ./mysql/initdb.d:/docker-entrypoint-initdb.d
networks:
- app_network
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --skip-character-set-client-handshake
volumes:
mysql_data:
name: mysql_data
networks:
app_network:
name: app_network
driver: bridge
각 설정에 대한 설명은 다음과 같습니다.
최상위 레벨 volumes
(위에서 mysql_data:
를 가지고 있음)
Docker가 관리하는 이름이 지정된 볼륨을 선언하고 설정합니다. 이 볼륨은 여러 서비스에서 공유할 수 있습니다.
볼륨의 이름, 드라이버, 옵션 등을 설정할 수 있습니다.
서비스 내부의 volumes (위에서 services → mysql → volumes
에 해당)
각 서비스(컨테이너)에서 사용할 볼륨 마운트를 정의합니다.
호스트의 디렉토리나 Docker 볼륨을 해당 컨테이너 내부의 디렉토리를 연결합니다.
./mysql/conf.d
MySQL 서버의 추가 설정을 담은 .cnf 파일들을 제공하여 기본 설정을 덮어씁니다.
./mysql/initdb.d
데이터베이스 초기화 시 실행할 SQL 스크립트나 쉘 스크립트를 제공합니다.
networks 설정
[mysqld]
user=watchducks
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock
# 기본 문자셋
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 성능 설정
innodb_buffer_pool_size=1G
innodb_log_file_size=256M
innodb_log_buffer_size=64M
innodb_flush_log_at_trx_commit=2
innodb_flush_method=O_DIRECT
# 최대 연결 수
max_connections=200
# 타임아웃 설정
wait_timeout=28800
interactive_timeout=28800
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/run/mysqld/mysqld.sock