
도커를 이용해 MySQL을 설치하는 것은 매우 편리하고 효율적인 방법입니다. 특히 개발이나 테스트 환경을 구축할 때 다른 데이터베이스와 충돌할 염려가 없고, 여러 MySQL 인스턴스를 손쉽게 관리할 수 있다는 장점이 있습니다.
도커로 MySQL 설치 시 필수 고려사항
사전 준비
먼저 시스템에 도커가 설치되어 있어야 합니다. 최신 버전의 도커는 대부분 도커 컴포즈를 기본적으로 포함하고 있습니다.
docker-compose.yml
파일 작성 시 유의점
docker-compose.yml
파일을 만들 때 다음 사항들을 염두에 두고 MySQL 컨테이너를 설정하는 것이 좋습니다.
1. 데이터 영속성을 위한 볼륨 마운트
컨테이너가 삭제되어도 데이터가 사라지지 않도록 볼륨 마운트를 설정해야 합니다. 호스트 시스템의 특정 디렉터리에 MySQL 데이터를 저장하도록 하여 데이터의 지속성을 확보할 수 있습니다.
volumes:
- ./mysql-data:/var/lib/mysql
이 설정은 호스트의 ./mysql-data
폴더를 컨테이너 내부의 /var/lib/mysql
에 연결합니다.
2. 한글 지원을 위한 인코딩 설정
데이터베이스의 문자 인코딩을 UTF-8로 맞춰야 한글을 포함한 다양한 문자를 문제없이 저장하고 불러올 수 있습니다.
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
환경 변수를 이용해 설정할 수도 있습니다.
environment:
MYSQL_DATABASE: your_database_name
MYSQL_ROOT_PASSWORD: your_root_password
TZ: Asia/Seoul
# 아래는 인코딩 관련 환경 변수 예시입니다.
# MYSQL_CHARSET: utf8mb4
# MYSQL_COLLATION: utf8mb4_unicode_ci
일반적으로 my.cnf
파일을 볼륨으로 연결하여 설정을 관리하는 방법이 많이 쓰입니다.
volumes:
- ./my.cnf:/etc/mysql/my.cnf:ro
my.cnf
파일의 예시 내용은 다음과 같습니다.
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
3. 시간대 설정
데이터베이스의 시간을 한국 시간대(Asia/Seoul)로 설정하여 시간 데이터의 일관성을 유지하는 것이 중요합니다.
environment:
TZ: Asia/Seoul
4. 테이블명 대소문자 구분 비활성화
lower_case_table_names=1
설정을 통해 테이블 이름의 대소문자 구분을 비활성화할 수 있습니다. 이는 윈도우나 macOS 환경에서 개발할 때 대소문자를 구분하지 않는 경우가 많기 때문에, 리눅스 환경과의 호환성을 위해 유용합니다.
command: --lower_case_table_names=1
이 설정은 모든 테이블 이름을 소문자로 처리합니다.
5. ONLY_FULL_GROUP_BY
모드 조정
MySQL 5.7부터 기본으로 활성화되는 ONLY_FULL_GROUP_BY
SQL 모드는 GROUP BY
절 사용 시 엄격한 규칙을 적용합니다. 개발 및 테스트 환경에서 이 규칙이 작업의 유연성을 떨어뜨릴 수 있으므로, 필요에 따라 이 모드를 비활성화하거나 조정할 수 있습니다.
command: --sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
위 예시는 ONLY_FULL_GROUP_BY
를 제외한 다른 모드만 유지하는 방식입니다. 모든 SQL 모드를 완전히 비활성화하려면 --sql-mode=""
를 사용하면 됩니다.