SCP 사용 이유
백업서버를 DB서버에 마운트 시킨 후 1일 1 백업 (또는 1일 3백업)을 수행이 필요했다.
DB 서버에서는 리눅스 Cron Job을 통해 데이터베이스를 백업 후에 저장되는 경로를 마운트된 백업서버쪽에 쌓으려고 했다.
아무래도 DB서버 자체의 용량이 꽤 큰편이 아니다보니 다른 NAS나 서버등을 마운트 시킬 필요가 있었기 때문이다.
하지만 여기서 이슈가 있었다.
DB 서버의 경우 다른 서버들은 볼 수 있었지만, DB 서버 자체가 다른 서버들을 볼 수 없었다.
물론 데이터센터쪽에 연락해 바라볼 수 있게 수정해달라하면 되지만, IP주소등의 변경이 이뤄지면 운영되는 플랫폼에도 영향이 갈 수 있어 추후에 알아보기로 하고, 우선은 SCP를 통해 백업서버에서 직접 DB서버에 저장된 파일을 복사해오는 쉘스크립트를 작성했다.
백업을 위한 쉘스크립트 작성
#!/bin/bash
# MySQL 정보 설정
MYSQL_USER="계정"
MYSQL_PASSWORD="비밀번호"
DATABASE_NAME="데이터베이스명"
OUTPUT_FILE="/backup/mysql/backup_$(date +'%Y-%m-%d').sql"
# mysqldump 실행
/usr/lib/mysql/bin/mysqldump --routines -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$DATABASE_NAME" > "$OUTPUT_FILE"
# 기존에 별도 특정 계정, 그룹을 만들고 해당 그룹은 root와 새로만든 계정이 들어있다는 가정하에 설정
chmod 770 "$OUTPUT_FILE"
chown root:신규그룹 "$OUTPUT_FILE"
보안적인 부분인 퍼미션 홀이 생기지 않도록 주의하는건 알아서 하고, 이제 DB서버내에서 Crontab을 수정했다.
# centos crontab 수정
crontab -e
# 아래 7번째 줄 한줄 추가
# 새벽 두시마다 해당 스크립트 수행
0 2 * * * /backup/mysql_backup.sh
crontab -e 사용시, vi 에디터가 켜지므로 vi 에디터 사용법에 대해서는 따로 알아보자.
cron이 잘 도는진 모르겠지만, 우선 쉘스크립트는 실행해보니 잘된다.
파일이 정상적으로 생긴걸 확인했으니 SCP 테스트를 진행했다.
# 원격서버 폴더 : /backup
# 로컬서버 폴더 : /backup/mysql
scp 원격서버_계정@원격서버_IP:/backup/mysql/backup_$(date +'%Y-%m-%d').sql /backup/backup_$(date +'%Y-%m-%d').sql
내부망이라 그런지 엄청 매우 빠르다.
이제 위 코드를 이용해 쉘스크립트를 만들려는데, 수행할때 비밀번호를 요구하기에 비밀번호가 없이 연결될 수 있도록 SSH 키 쌍을 원격지서버(DB서버)쪽에 등록한다.
SCP 를 위한 SSH 키 생성 및 설정
1. SCP 명령어를 수행할 Local 서버의 SSH 키 쌍 생성
# 기존에 있다면 SKIP 해도 됨
ssh-keygen -t rsa
2. 원격서버에 공개 키 복사
ssh-copy-id 원격지서버_계정@원격지서버_IP
예)
ssh-copy-id backup@10.24.50.18
3. 로컬서버에서 원격서버 접속 테스트
ssh 원격서버_계정@원격서버_IP
# 비밀번호를 요구하지 않고 접속이 되었다면 성공!
이제 로컬서버에서 scp 관련 쉘스크립트를 작성하고 crontab에 넣어주자.
4. 로컬서버에 구동할 쉘스크립트 작성
파일명 : download_mysql_backup.sh
#!/bin/bash
HOST="원격서버_IP"
USER="원격서버_계정"
FILE_NAME="backup_$(date +'%Y-%m-%d').sql"
scp $USER@@HOST:/backup/mysql/$FILE_NAME /backup/$FILE_NAME
ssh $USER@$HOST "rm /backup/mysql/$FILE_NAME"
5. Crontab 에 등록
# centos crontab 수정
crontab -e
# 아래 7번째 줄 한줄 추가
# 새벽 세시마다 해당 스크립트 수행
0 3 * * * /backup/download_mysql_backup.sh
반응형