Skip to content
seapy edited this page Sep 26, 2014 · 1 revision

소중한 데이터가 없어지지 않도록 백업은 필수입니다.

레일스 프로젝트에서 일반적으로 백업해야할 데이터는 2개인데 하나는 첨부파일이 저장되는 public/uploads이고 다른 하나는 DB 데이터입니다.

rorla는 Docker를 사용하는데 이경우 이 2가지 데이터를 백업하는 방법에 대해 이야기합니다.

Docker 컨테이너의 백업

Docker는 중요한 데이터는 볼륨컨테이너로 별도로 분리시키는 방법을 사용하는데요. 이를 이용해 해당 볼륨 컨테이너를 사용하는 새로운 컨테이너를 실행하고 여기서 백업합니다.

rorla_mysql_data 볼륨 컨테이너를 사용하는 새로운 컨테이너를 생성했고 호스트의 /root/backup 폴더를 새로운 컨테이너의 /backup 폴더와 연결했습니다. 그리고 tar 명령어를 이용해 /var/lib/mysql 폴더를 백업합니다.

$ docker run --volumes-from rorla_mysql_data -v /root/backup:/backup busybox tar cf /backup/rorla_mysql.tar /var/lib/mysql

이 명령어의 실행결과로 호스트 컴퓨터의 /root/backup 폴더에는 rorla_mysql.tar 파일이 생성됩니다.

Docker 컨테이너 백업에 대한 더 자세한 정보는 다음 정보를 참고하세요.

최종 백업 스크립트

현재 운영중인 rorla 서비스를 백업하기 위해 사용한 스크립트 파일입니다.

#!/bin/sh

BACKUP_DIR=/backup/`date +%Y`/`date +%m`
mkdir -p /root$BACKUP_DIR

# MySQL 데이터 백업
MYSQL_BACKUP=$BACKUP_DIR/rorla_mysql_`date +%Y%m%d`.tar
docker run --volumes-from rorla_mysql_data -v /root/backup:/backup busybox tar cf $MYSQL_BACKUP /var/lib/mysql

# upload 폴더 백업
RAILS_UPLOAD_BACKUP=$BACKUP_DIR/rorla_uploads_`date +%Y%m%d`.tar
docker run --volumes-from rorla_uploads -v /root/backup:/backup busybox tar cf $RAILS_UPLOAD_BACKUP /app/public/uploads

# ncloud file storage 에 데이터 전송
NCFS_BACKUP_DIR=ncfs://rorla_backup$BACKUP_DIR
/root/ncloud_fscmd/ncfscmd.sh put /root$MYSQL_BACKUP $NCFS_BACKUP_DIR
/root/ncloud_fscmd/ncfscmd.sh put /root$RAILS_UPLOAD_BACKUP $NCFS_BACKUP_DIR