ftp 를 이용한 네트웍 백업 스크립트

Tip OS/Util 2005. 7. 26. 15:42 Posted by HisPark
출처 : kltp.kldp.org


워낙에 설명이 잘 되어 있어서 다른 설명은 필요하지 않을것 같습니다. size가 큰 파일들 백업할시 유용하게 사용할수 있을것 같네요.


#!/bin/sh

################# 개요 ##################
# 인자로 들어온 server1의 특정 db를 백업한다
# 인자가 생략되면 db1 이다.
# split로 분할 압축후 server2의 /home/myid/db_backup 에 ftp로 전송한다
# 파일명 : 'db명'_'날짜'_'aa' , 'ab' ...
######################################

############### 필요한 변수들 #############
# host : 백업될 서버
# username : ftp로 접속할 id
# password : 비번
# db_name : server1의 db명
# mysql_dir : mysql 데이터 디렉토리
# backup_dir : server1의 분할압축된 파일이 놓일 임시 디렉토리
# today_date : 오늘날짜 (파일명에 사용됨)
# size : 한 조각의 크기
#####################################
host='server2.test.com'
username='myid'
password='mypasswd'
db_name=${1:-db1}
mysql_dir='/home/mysql/data/'
backup_dir='/tmp/pieces/'
today_date=`date +%Y%m%d`
size='650m'

# 기존에 만들어진 파일들을 없앤다
# /tmp/pieces 로 이동후 원하는 db 디렉토리를 분할압축 한다.
# ftp로 server2 의 /home/foremost/db_backup 으로 옮긴다.

echo '[`date +%Y-%m-%d\ %T`] $db_name backup Start !!!'
if [ -d '$backup_dir' ]; then
rm -f ${backup_dir}*
fi

cd $backup_dir
tar cf - ${mysql_dir}${db_name} | bzip2 -c | split -b $size - ${db_name}_${today_date}_

{
echo user $username $password
echo cd /home/myid/db_backup
echo lcd /tmp/pieces
echo prompt
echo mput *
echo quit
} | ftp -n $host 21

echo '[`date +%Y-%m-%d\ %T`] $db_name backup End !!!'
exit 0


# 1G 용량의 db를 백업하는데 약 20여분이 소요되더군요.
# bzip2 대신 gzip을 사용하면 좀더 빨라지지 않을까 싶습니다.