일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 트랜젝션
- sp_who
- 정규식
- sendmail
- vscode
- crontab
- 더존ERP
- js
- 리눅스
- pingtest
- python
- 메일
- 정규표현식
- erp
- 자바스크립트
- 핑
- ping
- 핑테스트
- 포트
- codeigniter
- port
- php
- jquery
- MSSQL
- 목차만들기
- 이메일주소
- JavaScript
- MYSQL
- 문자열
- 유효성
- Today
- Total
ioerror
RSYNC로 대용량 파일 백업하기 본문
상황
원격 서버의 데이터베이스를 백업받아야 하는데 30G가 넘는다.
그리고 백업본은 3일간 보관해야 한다.
처음에는 일반적인 방법으로 rsync를 했는데 간혹 완료가 안 되는 현상이 있었다.
원본은 30G인데 20G에서 멈춘다던가 아예 실행이 안된다던가 프로세스는 돌아가는데 더 이상 파일 받아지지 않는 것이다.
그래서 구글링에서 첫번째로 찾은 해결 방법이 임시 저장 디렉터리를 설정하는 것이다.
--temp-dir=/backup/temp
이 설정값을 넣고 한동안은 잘 되더니 원본 용량이 커져서인지 다시 동일 현상이 발생했다.
두 번째로 찾은 방법은 대역폭을 설정하는 것이다.
--bwlimit=[MbPS]
대역폭 값은 초당 받을 용량(Kbytes)을 설정한다.
rsync는 기본적으로 네트워크의 최대 대역폭을 사용한다고 하는데 아마도 대용량이다 보니 중간에 네트워크 손실이 있으면 프로세스만 남아 있고 파일은 중간에 끊어져 버리는 듯하다.
또 최대 대역폭을 사용하면 서버의 다른 서비스에 영향을 주기 때문에 안정적으로 전송하기 위해서는 대역폭을 설정하는 것이 좋다고 한다.
원격지 서버(원본서버) 작업 내용
우선 원격지 서버의 rsync에 백업 서버로의 rsync를 허용할 수 있도록 IP 등을 설정한다.
vi /etc/rsync.conf
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.1.2, 192.168.1.3 [허용할 IP 목록 콤마(,)로 구분하여 입력]
max connections = 10
[home]
path = /home
comment = home
exclude = DUMP
[home] 값은 백업 서버에서 rsync를 돌릴때 원격지 원본 파일 위치에 해당하는 별칭(alias)이다.
백업서버에서 원본 파일 위치를 그대로 입력하면 보안상 문제가 발생할 수 있기에 별칭을 사용하는 거 같다.
[원본(원격지) 서버 주소]::home/data
식으로 사용한다.
백업 서버 작업 내용
백업 스케줄 조건
매일 새벽 1시에 백업을 하되 3일 전 백업 파일은 삭제를 하고 백업 파일의 사용자, 그룹을 변경해야 한다.
원격지 서버의 백업 파일명은 "backup_2021_01_01..... bak" 형식이다.
이 조건으로 쉘 스크립트를 작성하고 저장한다.
#!/bin/sh
# 백업파일 저장 경로
dirBack='/backup/'
# 오늘 날짜
strDate=`date '+%Y_%m_%d'`
# 백업 파일명 일시
strDatetime=`date '+%Y_%m_%d %H:%i:%s'`
# 3일 전 날짜의 파일명
delDate=`date --date '3 days ago' +"%Y_%m_%d"`
# 삭제 대상인 3일전 파일명
delfilename='backup_'$delDate'*'
# 3일전 파일 삭제
rm -rf $dirBack$delfilename
# 원격지 파일명
orgfilename='backup_'$strDate'*'
#rsync 실행
rsync -azrt --temp-dir=/backup2t/tmp --bwlimit=2500 --log-file="[로그파일 경로]" --delete [원격지주소]::[원격지파일경로]/$orgfilename $dirBack;
# 백업 받은 파일의 소유자,사용자그룹을 설정한다.
chown -R [사용자].[사용자그룹] [백업파일 로컬 경로]
# 로그 저장시 실행 완료 일시
endDatetime=`date '+%Y_%m_%d %H:%i:%s'`
echo $endDatetime
exit
백업 스케줄 등록
매일 새벽 1시에 백업되도록 crontab에 백업 스크립트를 등록하여 스케줄링한다.
vi /etc/crontab
# 백업 스크립트 스케쥴링 매일 01시에 실행
# crontab의 시간은 초,분,시,일,월로 설정한다.
# /----- 분 (0~59)
# / /---- 시 (0~23)
# / / /--- 일 (1~31)
# / / / /-- 월 (1~12)
#/ / / / /- 요일(0|7:일, 1:월, 2:화~6:금)
0 1 * * * [백업스크립트 경로] > [백업 실행 로그파일 경로]
'OS' 카테고리의 다른 글
iptables 포트를 이용한 방화벽 설정 (0) | 2020.06.05 |
---|---|
Ping 사용법(옵션), 윈도우에서 포트(port)별로 핑 테스트 하기 (0) | 2020.06.02 |
가상계정(메일계정) 생성 (0) | 2020.05.19 |
[리눅스] 가상 계정 생성 및 가상 메일 계정 생성 (0) | 2019.12.07 |