워드프레스, XE 등 웹 서비스 데이터 백업과 복원


워드프레스, XE 등 웹 서비스 데이터 백업과 복원
이번 글에서는 워드프레스등의 웹기반 서비스 데이터를 백업하는 방법과 복원하는 방법에 대해서 설명해 드리겠습니다.

워드프레스등의 CMS (Contents Management System) 사이트를 장애가 발생하지 않도록 운영하는 것도 중요하지만, 데이터 유실등의 서버 장애가 발생했을 경우 복원하는 것이 서비스를 유지하는데 상당히 중요하다고 생각됩니다.

백업 및 복원에 대해서 설명드리면서 매일 글의 마지막 부분에는 자동 백업이 이뤄질 수 있도록 백업 스크립트를 함께 제공해 드리도록 하겠습니다. 백업에 필요한 데이터는 크게 아래와 같이 2가지로 나눠지게 되는데 환경은 리눅스 서버 계열을 대상으로 설명드립니다.

1. 데이터베이스

사이트 설정, 글, 회원정보 등의 데이터가 저장되는 저장소로 MySQL 또는 MariaDB를 기준으로 설명드리겠습니다.
데이터베이스 백업을 위해서는 필요한 정보는 아래와 같습니다.

데이터베이스 서버, 데이터베이스 사용자명, 데이터베이스 패스워드, 데이터베이스 이름

일반적으로 웹호스팅을 받으시는 경우, FTP 접속 계정정보와 데이터베이스가 동일한 경우가 많지만 사실 별도의 정보입니다.
워드프레스의 경우 FTP 권한으로 서버 접속을 하실 수 있으시면 wp-config.php 파일에 위의 내용이 기록되어 있으니 참고하실 수 있습니다.

서버에 접속 하신 다음에 다음과 같은 명령어를 실행하면 [백업파일이름]으로 파일이 생성됩니다.

mysqldump -h localhost -u [접속계정] -p [백업할 데이터베이스 이름] > [백업파일이름]

데이터베이스의 서버가 localhost 또는 127.0.0.1일경우, 다음과 같이 -h 옵션을 생략하여 사용 할 수 도 있습니다.

mysqldump -u [접속계정] -p [백업할 데이터베이스 이름] > 백업파일이름
mysqldump -h localhost -u hiseon -p hiseon > backup.sql

백업한 데이터베이스를 복원할 경우 아래와 같이 실행할 수 있습니다.

mysql -u [사용자명] -p [복원할데이터베이스이름] < [백업파일 이름]
mysql -u hiseon -p hiseon < backup.sql

위의 명령어를 사용하여 백업힌 데이터를 복원하였을 경우, 복원될 데이터베이스가 백업파일로 부터 복구가 이뤄지게 됩니다.

따라서 테스트 하실 경우 백업 후 DB 내용이 수정되었을 경우 데이터 유실이 될 가능성이 있으니, 테스트에 주의하시기 바랍니다.

2. 소스코드 등의 웹 파일

사진 및 HTML 등의 소스코드 등이 포함되어 있는 디렉토리안에 파일들을 원하시는 위치로 백업하시면 됩니다.

3. 백업 스크립트

아래의 스크립트는 위의 데이터베이스 및 소스코드 등 웹 파일들을 백업 하는 스크립트입니다.

#!/bin/bash

DB_HOST="localhost"
DB_USER="사용자이름"
DB_NAME="데이터베이스이름"
DB_PASS="패스워드"

SOURCE_PATH="/data/www"
BACKUP_PATH="/data/backup/"

rm -rf ${BACKUP_PATH}${DB_NAME}.`date --date='-3 day' +"%Y%m%d"`.sql
rm -rf ${BACKUP_PATH}www.`date --date='-3 day' +"%Y%m%d"`.tar.gz

mysqldump -h ${DB_HOST} -u ${DB_USER} -p${DB_PASS} ${DB_NAME} > ${BACKUP_PATH}${DB_NAME}.`date +"%Y%m%d"`.sql
tar cvfz ${BACKUP_PATH}www.`date +"%Y%m%d"`.tar.gz ${SOURCE_PATH}

위의 변수 중에 DB_HOST, DB_USER, DB_NAME, DB_PASS 의 데이터베이스 접속 정보를 올바르게 수정하시고, SOURCE_PATH 변수에 웹서비스 디렉토리를 지정해 주시면됩니다. 그리고 BACKUP_PATH 에 백업 파일들이 생성될 위치를 지정해 주시면 됩니다.

4. crontab 추가

위의 스크립트를 실행하면 데이터베이스 정보 뿐만 아니라, 웹 서비스 파일들 까지 함께 백업되게 됩니다. 이 스크립트를 crontab에 추가하셔서 매일 스크립트가 실행 될 수 있게 할 수 있습니다. 다음 명령어를 이용하여, crontab 을 수정 할 수 있습니다.

$ crontab -e
no crontab for kiso - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]:

위의 내용에서는 원하시는 편집기를 선택하시면 됩니다. 백업 스크립트 파일이 /data/backup/backup.sh 일 경우 새벽 1시에 백업되도록 하기 위해서는 아래와 같이 설정하시면 됩니다.

# m h  dom mon dow   command
0 1 * * * /data/backup/backup.sh

그리고 편집 파일을 저장 후 종료 하면 됩니다. crontab 추가된 내역을 확인 하기 위해서는 다음 명령어로 내용을 확인 할 수 있습니다.

$ crontab -l
# m h  dom mon dow   command
0 1 * * * /data/backup/backup.sh

참고로 스크립트가 매일 실행 될 경우 서버의 용량이 제한될 수 있기에, 3일전에 백업된 파일은 자동으로 삭제되는 기능이 함께 추가되어 있습니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)