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를 사용하여 작업 진행
- 방안 2. CLI 작업
- https://guide.ncloud-docs.com/docs/database-database-5-4
- https://api.ncloud-docs.com/docs/database-vmysql ( API )
- https://cli.ncloud-docs.com/docs/cli-vmysql ( CLI )
https://cli.ncloud-docs.com/docs/cli-vmysql-exportdbserverlogtoobjectstorage Cloud DB for MySQL 인스턴스의 데이터베이스 서버 로그 파일을 Object Storage로 전송 https://cli.ncloud-docs.com/docs/cli-vmysql-getcloudmysqlbackupdetaillist Cloud DB for MySQL 인스턴스의 백업 상세 리스트 조회 https://cli.ncloud-docs.com/docs/cli-vmysql-getcloudmysqlbackuplist Cloud DB for MySQL 인스턴스의 백업 리스트 조회
순서
- 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/
반응형
'Naver Cloud' 카테고리의 다른 글
MySQL 비교 ( Naver Cloud CDB vs VM ) (1) | 2023.12.10 |
---|
Contents
소중한 공감 감사합니다