MariaDB CDC 프로그램을 개발하고 테스트 하기 위해 MariaDB 설치를 진행했습니다. 로컬에 설치하는 것 보다는 컨테이너를 활용하는게 나을 것 같아 도커에 MariaDB 컨테이너를 올렸습니다. Docker compose 를 통해 MariaDB 를 설치하고 외부에 만들어 놓은 Config 파일을 세팅해주는 간단한 절차만 확인해보려고 합니다. 아래와 같은 순서로 글을 작성하겠습니다. 도커는 알아서 잘 설치해주셨으리라 믿고 가겠습니다 ^_^
- Docker-compose 작성
- MariaDB Config 작성
- 실행 및 확인
- 추가 이슈
Docker-compose 작성
MariaDB 컨테이너를 올리기 위해서는 도커 이미지가 필요합니다. 이미지를 받기 위해선 아래와 같이 pull 명령어를 사용하시면 됩니다.
docker pull mariadb
docker 이미지를 받고 docker run 명령어를 통해 실행하면 됩니다. 하지만 매번 run 명령어를 입력하고 환경변수를 추가해주는 작업이 귀찮아 docker-compose 파일로 문서화 해놓으려고 합니다. docker-compose.yml 파일 내용입니다.
version: "3.8"
services:
mysql:
container_name: mariadb_local
image: mariadb:10.5
volumes:
- ./db/conf.d:/etc/mysql/conf.d
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=12345
- TZ=Asia/Seoul
restart: always
저는 필요한 MariaDB 버전이 10.5 여서 10.5로 지정해주었습니다. 다른 명령어에 대한 설명은 스킵하고 volumes 명령어만 간단하게 설명하자면 도커 컨테이너의 파일을 사용자 시스템의 파일에 연결한다고 생각하시면 됩니다. 위 설정으로 보자면 로컬 PC의 ./db/conf.d 에 있는 설정파일을 도커 컨테이너에 있는 /etc/mysql/conf.d 와 연결한다고 보시면 됩니다. 그러면 mariadb 를 실행할 때 ./db/conf.d 에 작성해놓은 파일을 설정파일로 사용하게 됩니다.
environment 에 계정 설정을 추가할 수도 있고 volumes 에 sql 파일을 추가하여 db 실행시 sql 스크립트를 실행하여 테이블을 만들고 데이터를 생성할 수도 있습니다.
MariaDB Config 작성
./db/conf.d/my.cnf 를 아래와 같이 작성해놨습니다. 저는 DB 에 binary log 세팅을 하는게 목적이었습니다. 각자 필요에 맞게 설정을 추가하시면 됩니다.
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
port = 3306
#socket = /tmp/mysql.sock
skip-external-locking
skip-host-cache
skip-name-resolve
log-bin=mariadb-bin
binlog_format = row
binlog_row_image = full
binlog_row_metadata = full
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 16M
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
실행 및 확인
작성해놓은 파일을 기반으로 컨테이너를 실행해보겠습니다. -d 를 붙이면 백그라운드에서 실행이 가능합니다.
docker compose up -d
컨테이너가 정상적으로 실행됐는지 확인해 보겠습니다.
컨테이너가 정상적으로 실행됐고 ./db/conf.d/my.cnf 파일에 작성한 설정이 잘 적용됐는지 확인해보겠습니다.
my.cnf 에 설정해놓은 옵션이 잘 적용되어 있습니다. binlog_row_image 디폴트가 full 일수도 있으니 다른 옵션도 확인해보겠습니다.
마찬가지로 잘 적용되어 있습니다. binary log 는 리눅스 기준으로 /var/lib/mysql 에서 확인할 수 있습니다.
이렇게 Docker-compose 를 사용하면 내 로컬PC 에는 영향이 없고 좀 더 편하게 DB 를 실행할 수 있습니다.
추가1. World-writable config file 메시지
World-writable config file '/etc/mysql/conf.d/my.cnf' is ignored
컨테이너에 접속 후 mariadb 에 접속을 시도할 때 위와 같은 메시지가 발생할 수 있습니다. 해당 메시지는 로컬에 만들어 놓은 설정파일이 적용되지 않았다는 의미입니다. 이 메시지를 해결하기 위해선 로컬파일의 권한 설정을 변경해줘야 합니다.
chmod 755 설정파일
chmod 0444 설정파일
저는 윈도우를 사용하고 있어서 아래 명령어가 실행됐지만, 리눅스 환경이시면 위 명령어도 잘 실행될 것 입니다.
추가2. mysql 안먹힘
컨테이너에 접속후 mariadb 를 실행하려고 할 때, 예전에는 잘 먹혔던 mysql -u root -p 명령어가 안먹힐 수도 있습니다. 만약 MariaDB 버전이 11 이상을 사용하시는 분이라면 mysql 대신 mariadb 로 사용해야 합니다.