MySQL DB를 Object Storage로 자동 백업하기 | Ubuntu
개요
네이버 클라우드 Ubuntu에서 설치형 mysql DB를 매일 일정한 시간에 Object Storage로 자동으로 백업 받는 방법에 대해 정리해보았습니다.
순서는 로컬에 백업 파일 생성 후에 Object Storage로 저장하는 단계로 진행됩니다.
백업 폴더 생성
mkdir /data_backup
mkdir /data_backup/db
mysql DB 로컬 백업 스크립트 작성
우선은 mysql DB를 로컬에 백업 받는 스크립트를 작성합니다.
vi /bin/db_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_DIR=/data_backup/db/
# 전체 DB를 백업할 경우
mysqldump -u root -p디비패스워드 --all-databases > $BACKUP_DIR"backup_"$DATE.sql
# 특정 DB를 백업할 경우
# mysqldump -u root -p디비패스워드 --databases DB명 > $BACKUP_DIR"backup_"$DATE.sql
find $BACKUP_DIR -ctime +7 -exec rm -f {} \;
# 백업 파일을 202001224505 와 같은 형식으로 저장하고, 생성된지 7일이 지난 백업 파일을 삭제하는 코드입니다.
# 백업 스크립트에 실행 권한을 부여합니다.
chmod 755 /bin/db_backup.sh
pip 설치
aws cli를 설치하려면 pip가 먼저 설치되어 있어야 합니다.
혹시 이미 pip가 설치되어 있다면 아래에 있는 AWS CLI설치로 바로 이동하시면 되겠습니다.
apt install python-pip
⁃ CentOS6에서 pip - Python 설치하기
AWS CLI 설치
네이버 클라우드의 설명에 따르면 aws cli 1.16이후 버전은 일부 기능을 사용할 수 없어서 1.15버전을 사용한다고 합니다.
pip install awscli==1.15.85
API 인증키 생성
네이버 클라우드 API 인증키는 [콘솔] - [서브 계정] - [서브 계정 세부 정보] - [Access Key]탭에서 Access Key ID와 Secret Key를 가져오셔야 하며, 아직 만들어진 Key가 없다면 새로 만드셔야 합니다.
API 인증키를 서브 계정으로 생성해야 하는 이유: 메인 계정은 클라우드 서비스의 최대 권한을 가지기 때문에 메인 계정으로 생성한 API도 메인 계정과 동일한 최대 권한을 가지게 됩니다. 그러므로 메인 계정으로 API 인증키를 생성하게 되면 이 Key가 유출되었을 때 심각한 문제가 생기기 때문에 반드시 서브 계정에서 API 인증키를 생성해야 합니다.
AWS CLI 환경 설정
이제 AWS CLI로 접속하기 위해 환경설정을 해야 합니다.
위 단계에서 확인한 Access Key ID와 Secret Key를 아래 화면에서 입력하고 나머지 2가지 항목을 입력하지 않으셔도 됩니다.
aws configure
AWS Access Key ID [None]: 3frEtFjfkdsj89243nkfv89s
AWS Secret Access Key [None]: 0kr23-0vsijr2390fw:L?K23-0vcdsjr2390fchnr123[]vl/fwsh
Default region name [None]: [Enter]
Default output format [None]: [Enter]
Object Storage Bucket 생성
Object Storage에 data-back-up Bucket을 생성하고 그 아래에 db 폴더를 생성합니다.
Object Storage 접속 테스트
이제 Object Storage로 접속해보겠습니다. 얼핏 명령어만 보면 AWS에 접속하는 것처럼 보입니다. 그래서 네이버 클라우드로 접속하기 위한 –endpoint-url= 로 시작하는 옵션이 반드시 필요합니다.
# s3 ls 명령으로 Object Storage에 존재하는 버킷 리스트를 조회합니다.
aws --endpoint-url=https://kr.object.ncloudstorage.com s3 ls
2021-01-21 15:34:07 data-back-up
mysql DB 백업 스크립트 수정
이제 위 단계에서 만들었던 DB 로컬 백업 스크립트에 DB백업 파일을 Object Storage로 백업-동기화 하는 명령을 추가하겠습니다.
vi /bin/db_backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d%H%M%S)
BACKUP_DIR=/data_backup/db/
# 전체 DB를 백업할 경우
mysqldump -u root -p디비패스워드 --all-databases > $BACKUP_DIR"backup_"$DATE.sql
# 특정 DB를 백업할 경우
# mysqldump -u root -p디비패스워드 --databases DB명 > $BACKUP_DIR"backup_"$DATE.sql
find $BACKUP_DIR -ctime +7 -exec rm -f {} \;
# 여기서부터 추가되는 명령입니다.
# 로컬에 백업된 데이터를 Object Storage에 백업-동기화하는 명령어입니다.
# aws 명령어를 crontab에서 실행하기 위해 aws 파일의 전체 경로를 적어줍니다
/usr/local/bin/aws --endpoint-url=https://kr.object.ncloudstorage.com s3 sync /data_backup/ s3://data-back-up/
스케쥴링을 위한 crontab 설정
이제 마지막으로 완성된 스크립트를 일정한 시간, 여기서는 매일 새벽 6시에 실행되도록 설정합니다.
crontab -e
# 매일 새벽 6시에 백업이 진행되는 코드입니다.
00 06 * * * /bin/db_backup.sh > /dev/null 2>&1
postfix를 설치하면 해결된다는 이야기도 있는데 굳이 필요하지 않은 것을 설치하기 보다는 필요하지 않은 오류 메시지는 없애는 것이 나을 듯합니다.
백업 결과 확인
백업이 진행되고 나면 아래와 같이 db 백업 파일이 Object Storage에 저장된 것을 확인할 수 있습니다.
스샷에서는 빠른 확인을 위해 새벽 6시가 아닌 5분 단위로 백업한 내역입니다.
참고 URL
-
mysql DB 자동백업 방법
https://docs.3rdeyesys.com/docs/database/mysql-mariadb/backup/mysql-auto-backup/ -
AWS CLI를 이용한 Object Storage 접속 방법
https://docs.3rdeyesys.com/docs/storage/object-storage/how-to-access-using-aws-cli/
문서 업데이트 내역
날짜 | 내용 |
---|---|
2021-10-08 | 문서 최초 생성 |
2024-08-12 | API 인증키 생성 방법 안내 변경 |