Synology NAS에 MariaDB 12.0.2 Docker 설치 가이드

제가 요즘 시놀로지 nas에 mariadb를 설치해서 데이터베이스 서버로 이용하려고 하는데, 패키지가 너무 옛날 거더군요. 그래서 해당 내용을 정리해서 기록해두려고 합니다.

목차

  1. 사전 준비
  2. Container Manager UI로 설치
  3. Docker Compose로 설치
  4. 설치 확인
  5. 문제 해결

사전 준비

필수 요구사항

  • Synology DSM 7.0 이상
  • Container Manager 패키지 설치 (DSM 7.2 미만은 Docker)
  • 최소 1GB RAM 여유 공간
  • 최소 5GB 저장 공간

Container Manager 설치

  1. DSM 패키지 센터 열기
  2. “Container Manager” 검색 (구버전은 “Docker”)
  3. 설치 버튼 클릭

Container Manager UI로 설치

1단계: 이미지 다운로드

  1. Container Manager 실행
  2. 레지스트리 탭 클릭
  3. 검색창에 mariadb 입력
  4. mariadb 공식 이미지 선택
  5. 태그에서 12.0.2 선택
  6. 다운로드 클릭

2단계: 폴더 구조 생성

File Station에서 다음 폴더 생성:

/docker/mariadb/
├── data/      (DB 데이터 저장)
├── config/    (설정 파일 - 선택사항)
└── backup/    (백업 파일)

3단계: 컨테이너 생성

  1. 이미지 탭 → mariadb:12.0.2 선택 → 실행
  2. 네트워크 설정
    • bridge 선택 (기본값)
    • 다음 클릭
  3. 일반 설정
    • 컨테이너 이름: mariadb-12
    • 자동 재시작 활성화: ✓
  4. 포트 설정
    • 로컬 포트: 3307
    • 컨테이너 포트: 3306
    • 프로토콜: TCP
  5. 볼륨 설정
    • 폴더 추가 클릭
    • /docker/mariadb/data/var/lib/mysql
    • /docker/mariadb/backup/backup
    • 읽기/쓰기: ✓
  6. 환경 변수
   MYSQL_ROOT_PASSWORD = YourSecurePassword123!
   MYSQL_DATABASE = testdb
   MYSQL_USER = dbuser
   MYSQL_PASSWORD = dbUserPassword456!
   MYSQL_CHARSET = utf8mb4
   MYSQL_COLLATION = utf8mb4_unicode_ci
   TZ = Asia/Seoul
  1. 실행 기능 (권한 문제시)
    • 권한 있는 컨테이너 실행: ✓ (필요시)
  2. 완료 클릭

4단계: 권한 설정

SSH로 접속하여 권한 조정:

bash

# 폴더 권한 설정
sudo chmod 755 /volume1/docker/mariadb/data
sudo chmod 755 /volume1/docker/mariadb/backup

# 소유자 설정 (999는 MariaDB 내부 사용자)
sudo chown -R 999:999 /volume1/docker/mariadb/data

Docker Compose로 설치

1단계: docker-compose.yml 생성

/volume1/docker/mariadb/docker-compose.yml 파일 생성:

yaml

version: '3.8'

services:
  mariadb:
    image: mariadb:12.0.2
    container_name: mariadb-12
    restart: unless-stopped
    
    ports:
      - "3307:3306"
    
    volumes:
      - ./data:/var/lib/mysql
      - ./backup:/backup
      # config 폴더는 권한 문제 있을 시 제외
      # - ./config:/etc/mysql/conf.d
    
    environment:
      # 필수 설정
      MYSQL_ROOT_PASSWORD: YourSecurePassword123!
      
      # 초기 데이터베이스 생성 (선택)
      MYSQL_DATABASE: testdb
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: dbUserPassword456!
      
      # 인코딩 설정
      MYSQL_CHARSET: utf8mb4
      MYSQL_COLLATION: utf8mb4_unicode_ci
      
      # 시간대
      TZ: Asia/Seoul
    
    # 추가 설정 (선택사항)
    command:
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --skip-character-set-client-handshake
      - --max_connections=200
      - --innodb_buffer_pool_size=1G
    
    networks:
      - mariadb-network

networks:
  mariadb-network:
    driver: bridge

2단계: 실행

bash

cd /volume1/docker/mariadb
docker-compose up -d

설치 확인

로그 확인

bash

# 실시간 로그 보기
docker logs -f mariadb-12

# 마지막 50줄 보기
docker logs --tail 50 mariadb-12

접속 테스트

bash

# Docker 내부에서 접속
docker exec -it mariadb-12 mysql -u root -p

# 외부에서 접속
mysql -h NAS_IP -P 3307 -u root -p

기본 확인 명령어

sql

-- 버전 확인
SELECT VERSION();

-- 데이터베이스 목록
SHOW DATABASES;

-- 인코딩 확인
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';

-- 사용자 확인
SELECT user, host FROM mysql.user;

문제 해결

1. 권한 오류 (Permission Denied)

bash

# 권한 재설정
sudo chmod -R 755 /volume1/docker/mariadb
sudo chown -R 999:999 /volume1/docker/mariadb/data

# config 폴더 문제시 볼륨에서 제외

2. 포트 충돌

  • 시놀로지 패키지 MariaDB가 3306 사용 중
  • 해결: 3307 또는 다른 포트 사용

3. io_uring 경고

create_uring failed: falling back to libaio
  • 정상 동작 (시놀로지 커널이 구버전)
  • 무시해도 무방

4. 메모리 부족

my.cnf 설정 조정:

ini

[mysqld]
innodb_buffer_pool_size = 512M  # 줄이기
max_connections = 100            # 줄이기

5. 컨테이너 자동 시작 안됨

bash

docker update --restart unless-stopped mariadb-12

백업 및 복원

백업

bash

# 전체 백업
docker exec mariadb-12 mysqldump -u root -p --all-databases > /volume1/docker/mariadb/backup/backup_$(date +%Y%m%d).sql

# 특정 DB 백업
docker exec mariadb-12 mysqldump -u root -p testdb > /volume1/docker/mariadb/backup/testdb_$(date +%Y%m%d).sql

복원

bash

# 백업 파일로 복원
docker exec -i mariadb-12 mysql -u root -p < /volume1/docker/mariadb/backup/backup_20240101.sql

유용한 설정

성능 최적화 (my.cnf)

/volume1/docker/mariadb/config/my.cnf 생성:

ini

[mysqld]
# 성능 설정
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1

# 네트워크
max_connections = 200
max_allowed_packet = 64M

# 캐시
query_cache_size = 32M
query_cache_type = 1

# 로그
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

원격 접속 허용

sql

-- 모든 IP에서 root 접속 허용 (보안 주의)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

-- 특정 IP 대역만 허용
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%' IDENTIFIED BY 'password';

FLUSH PRIVILEGES;

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.