새소식

Naver Cloud

Naver Cloud CDB 소산 Backup

  • -
반응형

오늘은 Naver Cloud CDB를 사용하고 있을 경우 소산 백업, 즉 기본적인 Backup본 이외에 새로운 Backup본 하나를 다른 위치에 두 개 하는 요건이 있을 때 어떻게 처리를 했는지에 대한 포스팅을 해보려 합니다.

 

 

 

개요

  • Naver Cloud CDB를 사용하는 곳에서 소산 백업 요건이 발생

 


 

테스트 내용

  • CDB Backup후 Object Storage로 보내기
방안 1. Console에서 클릭으로 작업 진행
  • Cloud DB for MySQL 탭 → Backup → Backup 상세 내역 → 선택 후 Object Stroage 내보내기 → Object Storage 선택

 

방안 2. Naver CLI를 사용하여 작업 진행

 

 

 

순서

  1. CDB InstanceNO 가져오기 → BACKUP LIST 보기 → OBject Storage로 보내기
  • getCloudMysqlInstanceDetail
    • zoneCode
    • vpcNo
    • cloudMysqlServiceName

 

[root@lee cli_linux]# /root/cli_linux/ncloud vmysql getCloudMysqlInstanceList --regionCode KR --zoneCode KR-2  --cloudMysqlServiceName lee-un
{
  "getCloudMysqlInstanceListResponse": {
    "totalRows": 1,
    "cloudMysqlInstanceList": [
      {
        "cloudMysqlInstanceNo": "16518957",
        "cloudMysqlServiceName": "lee-un",
        "cloudMysqlInstanceStatusName": "running",
        "cloudMysqlInstanceStatus": {
          "code": "CREAT",
          "codeName": "CLOUD DATABASE(VPC) Created State"
        },
        "cloudMysqlInstanceOperation": {
          "code": "NULL",
          "codeName": "CLOUD DATABASE(VPC) Null OP"
        },
        "isHa": true,
        "isMultiZone": false,
        "cloudMysqlServerInstanceList": [
          {
            "cloudMysqlServerInstanceNo": "16518958",
            "cloudMysqlServerName": "lee-yun-001-2j5f",
            "cloudMysqlServerRole": {
              "code": "M",
              "codeName": "Master"
            },
            "cloudMysqlServerInstanceStatusName": "running",
            "cloudMysqlServerInstanceStatus": {
              "code": "RUN",
              "codeName": "CLOUD DATABASE(VPC) Server Running State"
            },
            "cloudMysqlServerInstanceOperation": {
              "code": "NOOP",
              "codeName": "CLOUD DATABASE(VPC) Server Null OP"
            },
            "regionCode": "KR",
            "zoneCode": "KR-2",
            "vpcNo": "32586",
            "subnetNo": "70989",
            "dataStorageSize": 10737418240,
            "cpuCount": 2,
            "memorySize": 8589934592
          },
          {
            "cloudMysqlServerInstanceNo": "16518964",
            "cloudMysqlServerName": "lee-yun-002-2j5g",
            "cloudMysqlServerRole": {
              "code": "H",
              "codeName": "Standby Master"
            },
            "cloudMysqlServerInstanceStatusName": "running",
            "cloudMysqlServerInstanceStatus": {
              "code": "RUN",
              "codeName": "CLOUD DATABASE(VPC) Server Running State"
            },
            "cloudMysqlServerInstanceOperation": {
              "code": "NOOP",
              "codeName": "CLOUD DATABASE(VPC) Server Null OP"
            },
            "regionCode": "KR",
            "zoneCode": "KR-2",
            "vpcNo": "32586",
            "subnetNo": "70989",
            "dataStorageSize": 10737418240,
            "cpuCount": 2,
            "memorySize": 8589934592
          }
        ]
      }
    ],
    "requestId": "6c9d15d1-6640-426b-8582-092c9bf23149",
    "returnCode": "0",
    "returnMessage": "success"
  }
}
[root
 
 
  • getCloudMysqlBackupDetailList
    • Date를 기반으로 당일 Backup본만 들어가도록
}
[root@lee cli_linux]# /root/cli_linux/ncloud vmysql getCloudMysqlBackupDetailList --regionCode KR --cloudMysqlInstanceNo "16518957"
{
  "getCloudMysqlBackupDetailListResponse": {
    "totalRows": 1,
    "cloudMysqlBackupDetailList": [
      {
        "fileName": "20230322",
        "startTime": "2023-03-22T09:35:08+0900",
        "endTime": "2023-03-22T09:35:18+0900",
        "backupSize": 597590854,
        "dataStorageSize": 10737418240
      }
    ],
    "requestId": "ac688fbd-2e0f-4c53-a71e-872bb99775d5",
    "returnCode": "0",
    "returnMessage": "success"
  }
}

 

 

  • Backup_list에서 특정 날짜의 정보만 확인
    • 원본
{
  "getCloudMysqlBackupDetailListResponse": {
    "totalRows": 30,
    "cloudMysqlBackupDetailList": [
      {
        "fileName": "20230322",
        "startTime": "2023-03-22T01:05:03+0900",
        "endTime": "2023-03-22T01:05:20+0900",
        "backupSize": 1068281995,
        "dataStorageSize": 10737418240
      },
     (생략)
      {
        "fileName": "20230221",
        "startTime": "2023-02-21T01:05:03+0900",
        "endTime": "2023-02-21T01:05:20+0900",
        "backupSize": 1068282044,
        "dataStorageSize": 10737418240
      }
    ],
    "requestId": "95b39337-55b1-46a7-8e73-a77a6956b1f6",
    "returnCode": "0",
    "returnMessage": "success"
  }
}

 

  • 특정날짜 ( 오늘날짜 )
[root@lee cli_linux]# cat lee.json | jq '[.getCloudMysqlBackupDetailListResponse.cloudMysqlBackupDetailList[] | select(.endTime > (now | strftime("%Y-%m-%d")))]'
[
  {
    "fileName": "20230322",
    "startTime": "2023-03-22T01:05:03+0900",
    "endTime": "2023-03-22T01:05:20+0900",
    "backupSize": 1068281995,
    "dataStorageSize": 10737418240
  }
]

[root@lee cli_linux]# cat lee.json | jq '.getCloudMysqlBackupDetailListResponse.cloudMysqlBackupDetailList[] | select(.endTime > (now | strftime("%Y-%m-%d"))).fileName'
"20230322"

 

 

  • json Date 자르기
[root@lee cli_linux]# /root/cli_linux/ncloud vmysql getCloudMysqlBackupDetailList --regionCode KR --cloudMysqlInstanceNo "16518957" | jq '.getCloudMysqlBackupDetailListResponse.cloudMysqlBackupDetailList[0]'
{
  "fileName": "20230322",
  "startTime": "2023-03-22T09:35:08+0900",
  "endTime": "2023-03-22T09:35:18+0900",
  "backupSize": 597590854,
  "dataStorageSize": 10737418240
}

 

 

  • exportBackupToObjectStorage
/root/cli_linux/ncloud vmysql exportBackupToObjectStorage --regionCode KR --fileName ${back_file_name} --bucketName testjj --cloudMysqlInstanceNo 16518957 --folderPath lee-cdb/

{
  "exportBackupToObjectStorageResponse": {
    "requestId": "41c7c81b-d6d4-40ff-ac3c-d7e1c17eb67c",
    "returnCode": "0",
    "returnMessage": "success"
  }
}

 

 

  • 완성본
    • 추가로 Date를 가져와서 당일에 떨어진 Backup File만 옮기도록 작업 수행
[root@lee cli_linux]# cat check.sh 
#!/bin/bash
CDB_ServiceName='lee-un'
bucket_name='testjj'
folderPath='lee-cdb/' ##Folder Path. It must end with /

### Check CDB Instance_Num
instance_num=`/root/cli_linux/ncloud vmysql getCloudMysqlInstanceList --regionCode KR --zoneCode KR-2  --cloudMysqlServiceName ${CDB_ServiceName} |jq  '.getCloudMysqlInstanceListResponse.cloudMysqlInstanceList[0].cloudMysqlInstanceNo'`

### Get CDB Backup Detail List ( Today )
back_file_name=`/root/cli_linux/ncloud vmysql getCloudMysqlBackupDetailList --regionCode KR --cloudMysqlInstanceNo ${instance_num} | jq '.getCloudMysqlBackupDetailListResponse.cloudMysqlBackupDetailList[] | select(.endTime > (now | strftime("%Y-%m-%d"))).fileName'`

### Export Backup to Object_storage
/root/cli_linux/ncloud vmysql exportBackupToObjectStorage --regionCode KR --fileName ${back_file_name} --bucketName ${bucket_name} --cloudMysqlInstanceNo ${instance_num} --folderPath ${folderPath}

 

 

  • 실행 시
[root@lee cli_linux]# sh +x check.sh 
{
  "exportBackupToObjectStorageResponse": {
    "requestId": "e9651a85-1f7b-44be-ae4e-763102b569db",
    "returnCode": "0",
    "returnMessage": "success"
  }
}

 

 

 

요약

  • 소산백업은 가능하지만 수동으로 하기보단 CLI, API를 이용하여 자동화 스크립트를 걸어두는 것이 좋다.
  • Naver Cloud CLI를 이용하여 CDB Backup → OBject Storage로 복사하였다.

 

참고

 https://michaelheap.com/jq-select-date-before-today/

 

Filter for dates before today with `jq`

Remove any entries in a list where the specified date is before today using `strftime`

michaelheap.com

 https://stackoverflow.com/questions/40210276/how-to-select-a-date-range-from-a-json-string-by-using-jq 

 

반응형

'Naver Cloud' 카테고리의 다른 글

MySQL 비교 ( Naver Cloud CDB vs VM )  (1) 2023.12.10
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.