1. 소개
데이터를 주기적으로 백업하는 것은 모든 프로덕션 데이터베이스 배포에서 중요한 부분으로, 재해 발생 시 데이터 복구를 보장하고 복원이 필요할 때 데이터 불일치를 최소화하는 데 도움이 됩니다.
카우치베이스는 다음을 제공합니다. cbbackupmgr 유틸리티는 수년에 걸쳐 개선되어 훨씬 더 높은 성능으로 대규모 데이터 세트를 백업하는 엔터프라이즈급 백업 및 복원 도구가 되었으므로 프로덕션에서 이 도구를 사용할 것을 권장합니다. 다음 사항을 언급할 가치가 있습니다. 카우치베이스 서버 6.5 백업-스토리지 엔진을 전면 개편하고 더 높은 압축률을 도입하여 백업-복원 성능이 크게 향상되고 각 백업 스냅샷에 필요한 스토리지가 줄어들어 비용을 절감할 수 있게 되었습니다.
2. 모범 사례
하지만 cbbackupmgr 이 Couchbase_HOME 아래에 존재한다면, 이는 not 클러스터의 활성 노드 중 하나에서 이 유틸리티를 실행하는 것이 좋습니다. 활성 요청의 리소스를 놓고 경쟁하게 되어 데이터베이스 시스템의 성능을 저해할 수 있기 때문입니다.
따라서 데이터베이스 클러스터와 백업 노드 모두에 대해 리소스를 더 잘 관리할 수 있도록 Couchbase 바이너리만 설치되고 Couchbase 서비스는 실행되지 않는 별도의 인스턴스(백업 및 복원 필요 시)를 제공하는 것이 가장 좋습니다.

위 그림에서 볼 수 있듯이, 5개의 노드로 구성된 Couchbase 클러스터 외에 별도의 백업/복구 노드가 프로비저닝되어 있습니다. 또 다른 모범 사례는 데이터베이스의 필수 스냅샷을 저장할 수 있는 충분한 공간을 확보하기 위해 Couchbase 데이터 세트 크기의 5배 이상을 저장할 수 있는 충분한 스토리지를 할당하는 것입니다. 복구 지점 목표 (RPO)를 설정할 수 있습니다.
3. 백업 전략
cbbackupmgr 는 DBA가 비즈니스 요구 사항에 가장 적합한 백업 전략을 구현할 수 있는 명령 모음을 제공합니다. 다음은 몇 가지 명령어입니다:
- cbbackupmgr 백업 – Couchbase 클러스터의 데이터 백업.
- cbbackupmgr 컴팩트 – 백업 압축
- cbbackupmgr 병합 – 백업 병합
- cbbackupmgr 구성 – 새 백업 리포지토리를 만듭니다.
- cbbackupmgr 목록 – 아카이브에 백업을 나열합니다.
이러한 명령을 사용하여 다음 세 가지 백업 전략 중 하나를 구현할 수 있습니다. 문서. 아래 예에서는 다음과 같이 설명합니다. 정기 병합 전략의 맥락에서, 쿠버네티스 환경 내에서 실행되는 카우치베이스 클러스터의 맥락에서.
4. 주기적 병합
이 백업 전략은 변경 사항을 백업하는 데 가장 적은 시간이 필요하고 압축 및 병합 프로세스 중에 데이터를 통합하는 데 데이터베이스 클러스터의 리소스 소비가 거의 없으므로 데이터베이스 오버헤드가 가장 낮습니다(백업 노드에서 발생하므로).
간단히 설명하면 다음과 같습니다. 정기 병합 전략이 작동합니다:
- 다음을 사용하여 백업 리포지토리 설정 cbbackupmgr 구성
- 다음을 사용하여 데이터베이스의 증분 백업(리포지토리에 있음)을 수행합니다. cbbackupmgr 백업
- 다음을 사용하여 백업 압축을 수행합니다. cbbackupmgr 컴팩트 를 사용하여 디스크 공간을 효율적으로 사용할 수 있습니다.
- 다음을 사용하여 가장 오래된 백업을 병합합니다. cbbackupmgr 병합 를 사용하여 리포지토리의 백업 수가 무한정 늘어나지 않고 공간 요구 사항을 계속 확인할 수 있습니다.
참고: 위의 단계는 다음에서 캡처한 것입니다. 백업-위드-주기적-병합.sh 스크립트를 사용하여 주기적으로 백업하는 데 사용할 것입니다.
5. 카우치베이스 데이터 백업
지난 블로그에서 Couchbase Autonomous Operator에 대해 단계별로 설명한 바 있습니다. 퍼시스턴트 볼륨을 사용하여 자가 복구가 가능한 고가용성 Couchbase 클러스터를 배포하는 방법. 이러한 단계를 따라 클러스터를 이미 배포했다고 가정하면, 아래 단계에서는 다음을 사용하여 자동 백업 기능을 설정하는 방법을 설명합니다. 크론잡
. 데이터를 정기적으로 백업하고 실제로 재해 복구가 필요하기 전에 백업 복원을 테스트하여 복원 프로세스를 확인하는 것이 가장 좋은 방법입니다.
이 기능은 운영자가 제공하지 않으며 클러스터 관리자가 백업 정책을 정의하고 데이터 복원을 테스트하도록 맡깁니다. 이 섹션에서는 필요한 기능을 수행하는 데 사용할 수 있는 몇 가지 일반적인 패턴에 대해 설명합니다.
5.1. 스토리지 클래스 생성
아래의 쿠버네티스 리소스 정의는 전체 클러스터의 상태를 저장하는 백업의 일반적인 배열을 보여줍니다. 먼저 StorageClass
를 사용하여 포맷합니다. xfs
를 사용하여 최적의 성능을 구현할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 백업/복원 작업을 위한 스토리지 클래스 생성 apiVersion: 스토리지.k8s.io/v1 종류: StorageClass 메타데이터: 레이블: k8s-addon: 스토리지-aws.애드온.k8s.io 이름: gp2-백업-스토리지 매개변수: 유형: gp2 fsType: xfs 프로비저너: 쿠버네티스.io/aws-ebs reclaimPolicy: 유지 볼륨 바인딩 모드: WaitForFirstConsumer |
에서 위의 정의를 사용하여 backup-sc.yaml 파일을 만들면 다음과 같이 스토리지 클래스를 만들 수 있습니다:
1 |
$ kubectl create -f 백업-sc.yaml -n emart |
5.2. 영구 볼륨 만들기
영구 볼륨은 장애 발생 시 데이터를 안전하게 보관하기 위해 청구됩니다. 예상 데이터 세트 크기, 데이터 보존 일수, 증분 백업 사용 여부에 따라 클레임 크기를 계획해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
# 백업 스토리지 볼륨 정의 종류: 퍼시스턴트 볼륨 클레임 apiVersion: v1 메타데이터: 이름: 백업-pvc 사양: 저장소 클래스 이름: gp2-백업-스토리지 리소스: 요청: 스토리지: 50Gi accessModes: - ReadWriteOnce |
위의 정의를 backup-pvc.yaml 를 클릭하고 클레임을 생성합니다:
1 |
$ kubectl create -f 백업-pvc.yaml -n emart |
5.3. 백업 리포지토리 구성
데이터의 스냅샷을 주기적으로 찍으려면 먼저 백업 아카이브 위치를 구성해야 합니다. 영구 볼륨을 마운트하고 백업 리포지토리를 초기화하는 작업이 만들어집니다. 리포지토리의 이름은 카우치베이스
이후 사양에서 클러스터 이름에 매핑됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 백업 리포지토리 만들기 종류: Job apiVersion: 배치/v1 메타데이터: 이름: 카우치베이스-클러스터-백업-구성 사양: 템플릿: 사양: 컨테이너: - 이름: 백업-구성 이미지: 카우치베이스/서버:엔터프라이즈-6.5.0 명령: ["cbbackupmgr", "config", "--아카이브", "/backups", "--repo", "couchbase"] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" 볼륨: - 이름: 카우치베이스-클러스터-백업-볼륨 퍼시스턴트 볼륨 클레임: 클레임 이름: 백업-pvc restartPolicy: 절대로 |
위의 정의를 config.yaml 를 클릭하고 백업 리포지토리를 만듭니다:
1 |
$ kubectl create -f 구성.yaml -n emart |
5.3. 크론잡으로 백업 실행
에 설명된 대로 크론잡을 만듭니다. 주기적-백업.yaml 파일을 생성하고, a) 포드에서 백업 스크립트를 다운로드하고 b) 스크립트를 실행하고 영구 스토리지 볼륨을 사용하여 클러스터 데이터를 백업하는 방식으로 Couchbase 클러스터를 백업합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
종류: 크론잡 apiVersion: 배치/v1beta1 메타데이터: 이름: 카우치베이스-클러스터-백업-create 사양: 일정: "*/5 * * * *" 작업 템플릿: 사양: 템플릿: 사양: 컨테이너: #D백업을 주기적으로 병합하는 스크립트를 삭제하여 실행할 때마다 새 스크립트를 가져올 수 있도록 합니다. - 이름: 삭제-스크립트 이미지: 카우치베이스/서버:엔터프라이즈-6.5.0 명령: ["rm", "/backups/backup-with-periodic-merge.sh"] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" initContainers: #D가젯 리포지토리에서 백업 스크립트를 다운로드하세요. - 이름: wget-백업-스크립트 이미지: 카우치베이스/서버:엔터프라이즈-6.5.0 명령: ["wget", "https://raw.githubusercontent.com/couchbaselabs/cboperator-hol/master/eks/cb-operator-guide/files/sh/backup-with-periodic-merge.sh", "-P", "/backups/."] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" #C백업 스크립트의 모드를 실행으로 변경합니다. - 이름: chmod-스크립트 이미지: 카우치베이스/서버:엔터프라이즈-6.5.0 명령: ["chmod", "700", "/backups/backup-with-periodic-merge.sh"] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" 1TP5스크립트를 실행하여 a) 백업 b) 압축 c) 각 스냅샷과 병합을 수행할 수 있도록 합니다. - 이름: 주기적-병합 이미지: 카우치베이스/서버:엔터프라이즈-6.5.0 명령: ["sh", "-c" ,"/backups/backup-with-periodic-merge.sh --cluster cbdemo-srv.emart.svc"] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" 볼륨: - 이름: 카우치베이스-클러스터-백업-볼륨 퍼시스턴트 볼륨 클레임: 클레임 이름: 백업-pvc restartPolicy: 절대로 |
위의 YAML에서는 5분마다 백업을 실행하고 있지만, 비즈니스 RPO를 충족할 수 있도록 빈도를 변경할 수 있습니다. Couchbase 클러스터는 네임스페이스 내에 배포되므로 emart
따라서 동일한 네임스페이스에 백업 크론잡을 배포합니다:
1 2 3 |
$ kubectl 신청하기 -f 주기적-백업.yaml -n emart 크론잡.배치/카우치베이스-클러스터-백업-create 생성 |
5.4 정기 백업 작업 확인
이 시점에서 5분마다 크론잡이 시작되는 것을 볼 수 있습니다. 그리고 일단 활성화되면 세 번 실행됩니다. initContainers
(와겟-백업-스크립트, chmod-스크립트, 주기적-병합)를 순차적으로 실행한 다음 코인테이너
(삭제-스크립트):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ kubectl get 포드 -n emart -w 이름 READY 상태 다시 시작 AGE 백업-노드 1/1 실행 중 0 1d 도심 데모-0000 1/1 실행 중 0 5d 도심 데모-0001 1/1 실행 중 0 5d 도심 데모-0002 1/1 실행 중 0 5d 도심 데모-0003 1/1 실행 중 0 5d 도심 데모-0004 1/1 실행 중 0 5d 카우치베이스-연산자-7654d844cb-gn4bw 1/1 실행 중 0 5d 카우치베이스-연산자-입학-7ff868f54c-5pklx 1/1 실행 중 0 5d 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 보류 중 0 2s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 보류 중 0 2s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 Init:0/3 0 2s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 Init:1/3 0 3s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 Init:2/3 0 4s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 Init:2/3 0 6s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 파드 초기화 0 27s 카우치베이스-클러스터-백업-create-1580357820-tz2hg 0/1 완료 0 30s |
각각의 로그를 볼 수 있습니다. initContainers
포드에 상태가 표시된 후 완료. . initContainers
우리가 관심을 갖는 것은 주기적 병합
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
$ kubectl 로그 카우치베이스-클러스터-백업-create-1580357820-tz2hg -n emart -c 주기적-병합 --------------------------------------------------------- 시작 STEP 1: 백업 : 목요일 Jan 30 04:17:12 UTC 2020 실행 중 백업... 명령: cbbackupmgr 백업 --아카이브 /백업 --repo 카우치베이스 --클러스터 카우치베이스://cbdemo-srv.emart.svc --사용자 이름 관리자 -비밀번호 비밀번호 --스레드 2 경고: 진행 상황 바 disabled 왜냐하면 터미널 너비 는 덜 보다 80 문자 백업 성공 완료 지원 up 버킷 "gamesim-sample" 성공 돌연변이 백업; 586, 돌연변이 실패 에 백업: 0 삭제 백업: 0, 삭제 실패 에 백업: 0 지원 up 버킷 "travel-sample" 성공 돌연변이 백업; 0, 돌연변이 실패 에 백업: 0 삭제 백업: 0, 삭제 실패 에 백업: 0 --------------------------------------------------------- 시작 STEP 2: 컴팩트 : 목요일 Jan 30 04:17:20 UTC 2020 목록 의 백업 스냅샷 ... 2020-01-28T23_01_37.592188562Z 2020-01-28T23_03_34.160387835Z 2020-01-28T23_05_08.103740281Z 2020-01-30T04_17_12.702824188Z 마지막 백업 이름 는: 2020-01-30T04_17_12.702824188Z 압축 의 백업... 명령: cbbackupmgr 컴팩트 --아카이브 /백업 --repo 카우치베이스 --백업 2020-01-30T04_17_12.702824188Z 압축 성공, 0 바이트 해방 --------------------------------------------------------- 시작 STEP 3: 병합 old 백업 : 목요일 Jan 30 04:17:24 UTC 2020 크기 항목 이름 604.93MB - + 카우치베이스 192.00MB - + 2020-01-28T23_01_37.592188562Z 192.00MB - + 맥주-샘플 37B 0 분석.json 414B 0 버킷-구성.json 192.00MB 7303 + 데이터 192.00MB 7303 1024 샤드 2B 0 전체-텍스트.json 1.94KB 1 gsi.json 784B 1 조회수.json 192.02MB - + 2020-01-28T23_03_34.160387835Z 192.02MB - + 여행-샘플 0B 0 분석.json 416B 0 버킷-구성.json 192.00MB 31591 + 데이터 192.00MB 31591 1024 샤드 2B 0 전체-텍스트.json 15.57KB 10 gsi.json 2B 0 조회수.json 64.02MB - + 2020-01-28T23_05_08.103740281Z 64.02MB - + 여행-샘플 0B 0 분석.json 416B 0 버킷-구성.json 64.00MB 0 + 데이터 64.00MB 0 1024 샤드 2B 0 전체-텍스트.json 15.57KB 10 gsi.json 2B 0 조회수.json 156.89MB - + 2020-01-30T04_17_12.702824188Z 92.88MB - + gamesim-샘플 0B 0 분석.json 417B 0 버킷-구성.json 92.88MB 586 + 데이터 92.88MB 586 1024 샤드 2B 0 전체-텍스트.json 1.95KB 1 gsi.json 501B 1 조회수.json 64.02MB - + 여행-샘플 0B 0 분석.json 416B 0 버킷-구성.json 64.00MB 0 + 데이터 64.00MB 0 1024 샤드 2B 0 전체-텍스트.json 15.57KB 10 gsi.json 2B 0 조회수.json 시작 2020-01-28T23_01_37.592188562Z, END 2020-01-28T23_03_34.160387835Z 병합 old 백업... 명령: cbbackupmgr 병합 --아카이브 /백업 --repo 카우치베이스 --시작 2020-01-28T23_01_37.592188562Z --끝 2020-01-28T23_03_34.160387835Z 병합 완료 성공 크기 항목 이름 412.92MB - + 카우치베이스 192.02MB - + 2020-01-28T23_03_34.160387835Z 192.02MB - + 여행-샘플 37B 0 분석.json 416B 0 버킷-구성.json 192.00MB 31591 + 데이터 192.00MB 31591 1024 샤드 2B 0 전체-텍스트.json 15.57KB 10 gsi.json 2B 0 조회수.json 64.02MB - + 2020-01-28T23_05_08.103740281Z 64.02MB - + 여행-샘플 0B 0 분석.json 416B 0 버킷-구성.json 64.00MB 0 + 데이터 64.00MB 0 1024 샤드 2B 0 전체-텍스트.json 15.57KB 10 gsi.json 2B 0 조회수.json 156.89MB - + 2020-01-30T04_17_12.702824188Z 92.88MB - + gamesim-샘플 0B 0 분석.json 417B 0 버킷-구성.json 92.88MB 586 + 데이터 92.88MB 586 1024 샤드 2B 0 전체-텍스트.json 1.95KB 1 gsi.json 501B 1 조회수.json 64.02MB - + 여행-샘플 0B 0 분석.json 416B 0 버킷-구성.json 64.00MB 0 + 데이터 64.00MB 0 1024 샤드 2B 0 전체-텍스트.json 15.57KB 10 gsi.json 2B 0 조회수.json |
참고: 위의 로그에서 볼 수 있듯이 병합 단계 이전에는 4개의 백업을 사용할 수 있었고 병합 후에는 3개의 백업 스냅샷이 있습니다. 복원 포인트
in 백업-위드-주기적-병합.sh 스크립트.
이것으로 백업 섹션을 마칩니다.
6. 복원
백업과 마찬가지로, Kubernetes 작업으로 데이터를 새로운 Couchbase 클러스터로 복원할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
종류: Job apiVersion: 배치/v1 메타데이터: 이름: 카우치베이스-클러스터-복원 사양: 템플릿: 사양: 컨테이너: - 이름: 카우치베이스-클러스터-복원 이미지: 카우치베이스/서버:엔터프라이즈-6.0.2 명령: ["cbbackupmgr", "복원", "--아카이브", "/backups", "--repo", "couchbase", "--cluster", "couchbase://cbdemo-srv.emart.svc", "--사용자 이름", "관리자", "--password", "비밀번호"] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" 볼륨: - 이름: 카우치베이스-클러스터-백업-볼륨 퍼시스턴트 볼륨 클레임: 클레임 이름: 백업-pvc restartPolicy: 절대로 |
임시 백업-복원 파드를 생성하여 사용 가능한 백업을 확인하거나 문제를 해결하려는 경우 동일한 퍼시스턴트 볼륨 클레임
를 새 파드에 추가합니다. 저장할 수 있는 파드의 정의는 다음과 같습니다. 백업-팟.yaml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
apiVersion: v1 종류: Pod 메타데이터: 이름: 백업-노드 사양: 포드 콘텐츠의 # 사양 컨테이너: - 이름: 백업-pod 이미지: 카우치베이스/서버:엔터프라이즈-6.5.0 # 영원히 돌리고 기다리기만 하면 됩니다. 명령: [ "/bin/bash", "-c", "--" ] args: [ "동안; 잠을 30; 자다; 완료" ] 볼륨 마운트: - 이름: "카우치베이스-클러스터-백업-볼륨" 마운트 경로: "/backups" 볼륨: - 이름: 카우치베이스-클러스터-백업-볼륨 퍼시스턴트 볼륨 클레임: 클레임 이름: 백업-pvc restartPolicy: 절대로 |
kubectl을 실행하여 일시적으로 파드를 불러온다:
1 2 3 4 5 6 7 8 9 10 11 12 |
$ kubectl 신청하기 -f br/백업-pod.yaml -n emart $ kubectl get 포드 -n emart 이름 READY 상태 다시 시작 AGE 백업-노드 1/1 실행 중 0 3d1h 도심 데모-0000 1/1 실행 중 0 7d1h 도심 데모-0001 1/1 실행 중 0 7d1h 도심 데모-0002 1/1 실행 중 0 7d1h 도심 데모-0003 1/1 실행 중 0 7d1h 도심 데모-0004 1/1 실행 중 0 7d1h 카우치베이스-연산자-7654d844cb-gn4bw 1/1 실행 중 0 7d2h 카우치베이스-연산자-입학-7ff868f54c-5pklx 1/1 실행 중 0 7d2h |
백업 노드가 실행 중이면 해당 파드에 로그인할 수 있습니다:
1 2 3 |
$ kubectl exec -it 백업-노드 -n emart -- /bin/bash root@백업-노드:/ |
그리고 실행 cbbackupmgr 목록
명령을 사용하여 기존 백업을 볼 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# cbbackupmgr 목록 --repo 카우치베이스 --아카이브 /백업 크기 항목 이름 256.04MB - + 카우치베이스 0B - + 2020-01-30T04_17_12.702824188Z 0B - + gamesim-샘플 0B 0 분석.json 0B 0 + 데이터 0B 0 오류: 아니요 데이터 샤드 는 발견 0B 0 전체-텍스트.json 0B 0 gsi.json 0B 0 조회수.json 128.02MB - + 2020-01-30T04_18_13.021340423Z .... |
또한 다음을 실행할 수도 있습니다. cbbackupmgr 복원
명령을 수동으로 실행합니다:
1 |
# cbbackupmgr restore --아카이브 /backups --repo couchbase --클러스터 couchbase://cbdemo-srv.emart.svc --사용자 이름 관리자 -비밀번호 비밀번호 |
복원이 완료되면 포드를 삭제하기만 하면 됩니다:
1 |
$ kubectl 삭제 -f 백업-pod.yaml -n emart |
7. 결론
미리 정의된 간격으로 주기적으로 백업을 수행하는 프로세스를 자동화하는 백업 크론잡을 구성하는 방법을 단계별로 안내해 드렸습니다. 여기서는 백업-위드-주기적-병합.sh 단일 스크립트 내에서 백업, 압축 및 병합을 실행하는 스크립트입니다. 그런 다음 이 스크립트는 주기적-백업.yaml 파일을 생성하여 쿠버네티스 환경 내에서 백업을 수행하는 프로세스를 자동화했습니다. 이 블로그에 설명된 모범 사례를 사용하여 정기적으로 백업을 수행하고 복원 명령을 사용하여 백업의 유효성을 정기적으로 확인하시기 바랍니다.