Skip to content

배포 및 유지보수 / 백업 및 마이그레이션

이 문서는 DataFlux Func 데이터를 백업하고 마이그레이션하는 방법을 주로 설명합니다.

1. 데이터베이스 백업

DataFlux Func는 데이터베이스를 자동으로 정기적으로 .sql 파일로 백업하며, DataFlux Func 데이터베이스 백업 디렉터리에 저장합니다.

이 기능은 mysqldump를 사용하여 데이터베이스를 백업합니다. 데이터베이스에 연결하는 MySQL 사용자에게는 정상적으로 백업하려면 충분한 권한이 필요하며, 여기에는 다음이 포함됩니다:

  • SELECT
  • RELOAD
  • LOCK TABLES
  • REPLICATION CLIENT
  • SHOW VIEW
  • PROCESS

자동 백업에는 다음이 포함됩니다:

  1. 완전한 데이터베이스 테이블 생성 구조
  2. 로그 및 작업 기록을 제외한 모든 데이터

기본적으로 데이터베이스 백업 파일은 다음 위치에 저장됩니다:

환경 위치
컨테이너 내부 /data/sqldump/
호스트 내부 {설치 디렉터리}/data/sqldump/

기본적으로 데이터베이스 백업 파일은 매시간 정각에 한 번 백업되며, 최대 7일(총 168개) 동안 보관됩니다. 파일 이름 규칙은 다음과 같습니다:

Text Only
1
dataflux-func-sqldump-YYYYMMDD-hhmmss.sql

2. 데이터베이스 내보내기 / 가져오기

DataFlux Func에 내장된 정기 데이터베이스 백업 외에도 mysqldump를 사용하여 데이터를 직접 내보내고 가져올 수 있습니다.

2.1 데이터 내보내기

내보내기 작업의 참조 명령은 다음과 같습니다:

Bash
1
docker exec {MySQL 컨테이너 ID} sh -c 'exec mysqldump --user=root --password="$MYSQL_ROOT_PASSWORD" --hex-blob --default-character-set=utf8mb4 --skip-extended-insert --databases dataflux_func' > {호스트의 백업 파일}

2.2 데이터 가져오기

가져오기 작업의 참조 명령은 다음과 같습니다:

Bash
1
docker exec -i {MySQL 컨테이너 ID} sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < {호스트의 백업 파일}

3. 데이터베이스 마이그레이션

시스템 설치 후 초기 단일 서버 검증 단계를 통과했다면 데이터베이스를 외부 데이터베이스(예: Alibaba Cloud RDS, Redis)로 전환해야 하는 경우, 다음 단계에 따라 수행할 수 있습니다:

외부 데이터베이스를 사용할 때 MySQL 버전이 5.7 이상이고 Redis 버전이 5.0 이상인지 확인해야 합니다

DataFlux Func는 클러스터 배포된 Redis를 지원하지 않습니다

3.1 환경 확인

외부 데이터베이스 인스턴스에 데이터베이스를 생성하고 다음 구성 항목을 확인하세요:

  • innodb-large-prefix=on
  • character-set-server=utf8mb4
  • collation-server=utf8mb4_unicode_ci

3.2 데이터 가져오기

위의 '데이터베이스 백업'에 따라 가장 최근의 MySQL 데이터베이스 백업 파일을 찾아 외부 데이터베이스로 가져옵니다.

3.3 DataFlux Func 구성 수정

DataFlux Func 구성 user-config.yaml을 찾아 실제 상황에 따라 다음 필드 내용을 추가/수정합니다:

YAML
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# MySQL 연결 구성
MYSQL_HOST    : '127.0.0.1'    # MySQL 연결 주소
MYSQL_PORT    : 3306           # MySQL 포트 번호
MYSQL_USER    : root           # MySQL 사용자 이름
MYSQL_PASSWORD: ''             # MySQL 비밀번호
MYSQL_DATABASE: dataflux_func  # MySQL 데이터베이스 이름

# Redis 연결 구성
REDIS_HOST    : '127.0.0.1'    # Redis 연결 주소
REDIS_PORT    : 6379           # Redis 포트 번호
REDIS_DATABASE: 5              # Redis 데이터베이스 번호(권장: 다른 애플리케이션과의 충돌을 피하려면 기본 데이터베이스 0을 사용하지 마세요)
REDIS_PASSWORD: ''             # Redis 비밀번호(비밀번호가 없으면 비워 둠)
REDIS_USE_TLS : false          # Redis 연결 TLS 지원 (true / false)

3.4 Docker Stack 구성 수정

Docker Stack 구성 docker-stack.yaml을 찾아 MySQL과 Redis 관련 부분을 삭제합니다(주석 처리하면 됩니다).

3.5 DataFlux Func 재시작

배포 및 유지보수 / 업그레이드 및 재시작 항목에 따라 DataFlux Func 전체를 재시작합니다.

4. 설치 디렉터리 변경

어떤 경우에는 기존에 DataFlux Func를 설치한 디스크 용량이 부족하여 설치 디렉터리를 새 대용량 디스크로 변경해야 할 수 있습니다.

이 경우 다음 절차에 따라 설치 디렉터리를 변경할 수 있습니다.

4.1 DataFlux Func 중지

  1. docker stack rm dataflux-func 명령을 사용하여 DataFlux Func를 중지합니다(이 단계는 시간이 걸릴 수 있습니다).
  2. docker ps를 사용하여 모든 컨테이너가 종료되었는지 확인합니다.
  3. cp {설치 디렉터리} {새 설치 디렉터리} 명령을 사용하여 DataFlux Func의 전체 설치 디렉터리를 새 위치로 복사합니다.
  4. /etc/dataflux-func를 열고 여기에 기록된 설치 디렉터리를 새 설치 디렉터리로 변경합니다.
  5. Docker Stack 구성 수정

Docker Stack 구성 docker-stack.yaml을 찾아 모든 volumes에서 설치 디렉터리와 관련된 내용을 새 설치 디렉터리로 변경합니다. 예:

Diff
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 version: '3.1'

 services:
   # 기타 내용 생략
   server:
     image: dataflux-func.com/dataflux-func:x.y.z
     labels:
       - server
     volumes:
-      - "/usr/local/dataflux-func/data:/data"
+      - "/my-workspace/dataflux-func/data:/data"
     networks:
       - datafluxfunc
       - default
     ports:
       - "8088:8088"
     command: ./run-server.sh

 # 기타 내용 생략
  1. docker stack deploy dataflux-func -c {설치 디렉터리}/docker-stack.yaml --resolve-image never 명령을 사용하여 모든 서비스를 재시작합니다.

설치 패키지의 이미지 파일 자체가 이미 로컬로 가져와져 있으므로 --resolve-image never 매개변수를 추가하면 Docker가 컨테이너를 시작할 때 의미 없는 이미지 검사를 피할 수 있습니다