curl 을 이용해 Linux 서버 백업을 다른 서버로 전송하기


최근 Ubuntu 서버에 있는 Mysql 과 특정 디렉토리에 있는 이미지 파일들을 다른 서버로 백업받을 수 있도록 해 달라는 부탁을 받았다.


방법이야 이것저것 많이 있겠지만 내가 알고 있으면서도 할 수 있는 가장 간단한 방법으로 잔머리를 조금 써 보았다.



쉘스크립트로 디비 백업은 mysqldump로, 특정 이미지 디렉토리에 있는 파일들은 그냥 tar 로 압축해서 curl 을 이용해서 다른 서버에 있는 웹서버로 전송하는 걸로 생각을 하고 한번 맨들어 보았다.


파일 수신쪽은 JSP 든 PHP든 뭐 편한걸로 하면 되겠지만 JSP 는 이것저것 더 셋팅이 필요하기 때문에 왠만해선 아무것도 추가 설치가 필요없는 PHP 를 사용하기로 했다.


요렇게 쉘 스크립트를 작성하고 cron 에 등록해서 원하는 일정으로 원격 백업서버로 백업할 수 있다.




Shell Script

CUR_DATE=`date '+%Y%m%d%H%M'`

# 백업된 압축파일이 생성될 디렉토리
BACKUP_DIR=/home/test/backup

# 백업할 디렉토리
TARGET_IMAGE_DIR=/home/backup_target_dir

DATABASE_BACKUP_FILE_NAME=database_$CUR_DATE.sql
IMAGE_BACKUP_FILE_NAME=images_$CUR_DATE.tar.gz
BACKUP_FILE_NAME=BACKUP_$CUR_DATE.tar.gz

BACKUP_SERVER_URL=http://www.backup_server.com/backup.php

mkdir $BACKUP_DIR

# DB BACKUP
mysqldump -uroot -p루트암호 -A > $BACKUP_DIR/$DATABASE_BACKUP_FILE_NAME

# 백업할 특정디렉토리 압축
tar zcvf $BACKUP_DIR/$IMAGE_BACKUP_FILE_NAME $TARGET_IMAGE_DIR

cd $BACKUP_DIR
tar zcvf /home/test/$BACKUP_FILE_NAME ./*

# 백업서버로 업로드
cd /home/test
curl -F backup_file=@$BACKUP_FILE_NAME $BACKUP_SERVER_URL

# clean
rm -rf $BACKUP_DIR
rm -rf ~/$BACKUP_FILE_NAME






백업 서버쪽 php (backup.php)


간단하게 요정도로만

<?php
        $uploaddir = '/home/stove/test/';
        $uploadfile = $uploaddir . basename($_FILES['backup_file']['name']);

        move_uploaded_file($_FILES['backup_file']['tmp_name'], $uploadfile);
?>


※ php 업로드 사이즈 제약으로 에러날수 있는데 php.ini 파일에 post_max_size 와 upload_max_filesize 값을 적당히 조정해 주면 된다.