http://www.xeschool.com/xe/step1_52



XE 코어 백업과 복원하기

XE의 백업과 복원은 포장이사로...

XE 코어로 만든 웹사이트를 업그레이드하거나 다른 서버로 이사를 가야 할 때 백업과 복원은 필수입니다. 그런데 FTP 프로그램을 이용해 파일을 하나하나 내려받고 다시 서버에 올린다면 XE 코어는 정상적으로 작동하지 않습니다. 왜냐하면 여러분이 호스팅 서비스를 이용해 계정을 할당 받고 사용하게 되면 아래 그림과 같이 html이라는 사용자 폴더(root, 서버환경에 따라 public_html 또는 www라는 폴더를 사용)를 이용하게 되는데 이 폴더 안에는 여러분이 사용중인 폴더와 XE 코어가 만들어서 사용하는 files 디렉터리가 함께 있기 때문입니다. files 디렉터리는 xe 디렉터리 안에 있고 웹사이트의 운영내용 및 설정 파일들을 XE 코어가 수시로 점검하고 수정하고 첨부 파일들을 저장하는데 사용하고 있습니다. 이 files 디렉터리는 FTP를 이용해 다운로드 하거나 이동, 복사 할 수 없습니다.

웹사이트 운영시 함께 할당 받는 또 하나는 데이터베이스(DB)입니다. DB는 쉽게 말해 엑셀문서를 닮았다고 설명드린 적이 있습니다. 데이터 하나하나를 쪼개어 저장하는 아주 강력한 친구입니다. 하지만 무척 까탈스러운 친구라 말붙이기도 어렵고 접근하기 조차 쉽지 않습니다. 하지만 XE 코어를 도와 항상 열심히 일하는 아주 근면성실한 친구이기 때문에 믿음직스럽습니다.

image

웹사이트를 백업한다는 것은 보통 html 폴더(root) 전체를 하나의 파일로 묶는 것을 말하는데 반드시 잊지말아야 하는 것은 DB에 저장되어 있는 자료 역시 압축파일로 받아 두어야 합니다. 만약 DB를 백업 받아두고 다시 복원해 주지 않으면 XE 코어는 정상적으로 작동하지 않습니다. 따라서 계정의 백업은 디렉터리의 백업과 DB 백업으로 나누어 작업하게 됩니다. XE 코어와 DB의 상호작용은 관리자 페이지에 있는 캐시파일 재생성 버튼으로 연동을 유지하게 됩니다. 이렇게 XE 코어를 백업 받거나 복원하기 위해서는 반드시 포장을 잘 해 두어야하며 또는 부득이하게 다른 서버 계정으로 이사를 가야한다면 반드시 포장이사를 맡겨야 합니다...^^ (필요에 따라서는 XE 디렉터리만 포장해도 상관 없으며 index.html 문서는 별도로 작성하고 필요한 파일만 가져가도 됩니다.)


1. 파일 및 디렉터리의 백업과 복원

계정의 백업 작업은 FTP를 이용해서 할 수 없습니다. 오직 SSH 또는 Putty 프로그램을 이용해 서버에 접속하고 텔넷 명령어를 사용해서 백업 및 복원 명령어를 입력해야 합니다. SSH를 이용해 서버에 접속하게 되면 최상위 디렉터리 바깥에서 디렉터리 전체를 하나의 파일로 묶어주는 명령어를 입력합니다. 최상위 디렉터리(root)는 서버 환경에 따라서 html, www 또는 public_html로 사용할 수 있습니다. ls 명령어를 입력해 보고 html, www, public_html 디렉터리만 보인다면 루트 디렉터리 바깥에 있는 것이 맞습니다.

tar -cvfpz backuphtml.tar.gz html

html은 압축하고자 하는 디렉터리의 이름이고 backuphtml.tar.gz는 백업 작업의 결과로 만들어질 압축파일 이름입니다. tar의 옵션의 c는 파일 및 디렉터리를 하나로 묶어 새 저장 파일을 만들라는 뜻입니다.

이렇게 만들어진 backuphtml.tar.gz 압축파일은 루트 디렉터리 바깥에 있고 서버에 그대로 두어도 상관은 없지만(서버용량이 가능하다면) 추후에 작업을 위해서는 FTP 프로그램을 이용해 다운로드 받아 두는 것이 좋습니다. 그리고 압축파일 네이밍을 할 때 백업일자를 같이 써주면 언제 백업 받아둔 것이지 쉽게 확인할 수도 있겠지요. 예) backuphtml_20110630.tar.gz

디렉터리의 백업파일을 복원하는 것은 마찬가지로 루트 디렉터리 바깥에서 아래의 명령어를 입력하는 것으로 쉽게 작업하실 수 있습니다. 이번에는 옵션에 c가 아니라 압축을 해제하는 옵션 x를 주게 됩니다. 만약 다른 계정에서 해제하려면 FTP를 이용해 백업 받은 압축 파일을 미리 업로드 해 두어야 합니다.

tar -xvfpz backuphtml.tar.gz

압축이 풀리게 되면 자동으로 html 디렉터리 안에 모든 파일이 원상태로 복구됩니다. 만약 다른 계정에서 html 디렉터리가 없다면 html 디렉터리를 만들고 압축된 파일을 그 안에 풀어 놓게 되는데 이때 html 디렉터리 안의 모든 내용을 새로운 계정 환경의 루트(root) 디렉터리 안으로 옮겨 주어야 합니다.(※ 아래 "다른 서버 계정으로 이사가기" 참고) 옵션 -p는 모든 퍼미션(권한) 정보를 포함하여 압축을 하기도 하고 해제하기도 하지만 만약을 위해 chmod 707 xe 명령을 실행하여 xe 디렉터리의 권한설정을 다시한번 실행해 주어도 좋습니다.

chmod 707 xe

TIP - 간혹 xe 디렉터리 안에 xe가 만들고 사용하는 files 디렉터리의 권한 문제로 오류가 발생하기도 합니다.
이런 경우 chmod -R 707 xe/files 명령어로 files 디렉터리를 포함하여 하위 폴더까지 권한을 재설정해 줍니다. 기타 오류에 대해서는 이용중인 호스팅 웹서버의 root 권한이 필요한 경우가 있습니다. 이런 경우 서비스 제공 회사와 상의하는 것이 바람직합니다.


2. 데이터베이스(DB)의 백업과 복원

DB의 백업은 파일을 압축하는 방법이 아니라 DB에서 사용할 수 있는 sql 문서를 한장 만들어 받아 두는 것입니다. DB는 까탈스러운 친구라고 했죠? 자료를 좀 백업해 달라고 요청을 하면 달랑 서류 한장만 넘겨 줍니다...^^ 그런데 이것을 압축 파일이라고도 부르는 이유는 모든 내용을 텍스트로만 작성하기 때문에 압축한다는 의미로 표현하는 것입니다. CD를 굽는다고 표현하는 것과 같습니다. 이 문서는 나중에 복원을 할때도 DB에게 보여주기만 하면 된답니다. DB를 백업하는 명령어는 아래와 같습니다.

mysqldump -u 아이디 -p 디비네임 > backupdb.sql

DB의 본래 이름은 데이터베이스 관리 시스템(Database Management System, DBMS)인데 이 친구가 쓰는 말은 SQL(Structured Query Language, 구조화 질의어)이라는 언어를 씁니다. 좀 유별납니다...^^ 그래서 정중하게 mysql님 DB를 좀 출력(dump)해 주시죠!(dump is a Unix program used to backup file systems.) 라고 해야 합니다. 명령어가 아닌 정중한 부탁을 해야 합니다. 그러면 backupdb.sql 문서를 내놓습니다. 이 문서 안에는 XE 코어에서 사용하는 테이블의 종류와 갯수 및 내용(스키마), 그리고 그동안 누가 로그인해서 어떤 글들을 썼는지, 그리고 어떤 첨부파일이 어느 디렉터리에 보관되고 있었고, 레이아웃은 어떤 것을 자주 쓰는지, 메뉴는 어떤 것들이 있는지 하는 아주 소소한 것들까지 적어 놓은 가계부와 같습니다.

DB를 복원하려면 위에서 받아둔 sql 문서를 다시 DB에게 보여주기만 하면 됩니다. 이때는 화살표를 반대로 꺽어주면 되죠!

mysql -u 아이디 -p 디비네임 < backupdb.sql

출력(dump) 해 달라는 부탁은 할 필요없습니다. 화살표만 mysql 쪽으로 꺽어서 sql 문서를 보여주기만 하면 됩니다. -p 다음에 비밀번호가 없는 것은 나중에 password: 라고 입력을 기다리기 때문에 그때 입력하면 됩니다. 아이디와 디비네임은 여러분의 계정 아이디와 DB의 네임을 입력하시면 됩니다.(서버에 따라 계정의 아이디와 DB네임, 비밀번호가 다를 수 있습니다.)

TIP - 아이디와 옵션 -u는 붙여 쓰기도 합니다. 즉 옵션 -u 다음의 문자열은 DB의 아이디로 인식합니다.


캐시파일 재생성 하기

루트 디렉터리와 그 안의 모든 파일들을 백업하고 DB 역시 백업한 후에 다시 복원 작업을 거치게 되면 반드시 XE 관리자로 로그인 한 후에 캐시파일을 재생성 해 주어야 합니다. 만약 관리자로 로그인이 되지 않는 경우, 하얀 백지로 웹사이트가 표시 된다면 xe/files/cache 디렉터리를 삭제(rm -rf cache)한 후에 아래 관리자 주소를 웹브라우저 주소 입력칸에 직접 입력하여 관리자로 로그인 합니다. /xe/는 코어 설치폴더 이름입니다.

  • http://웹사이트 주소/xe/?module=admin
  • http://웹사이트 주소/xe/?module=admin&act=dispAdminConfig

관리자 로그인 후 캐시파일을 재생성하게 되면 XE 코어가 정상적으로 작동하게 됩니다.

TIP - 텔넷 명령어 rm -rf cache 로도 xe/files/cache 디렉터리가 삭제되지 않으면 nobody 권한문제 때문입니다. 호스팅 회사에 문의하여 삭제를 요청하는 것이 좋습니다. 간혹 php 문서를 활용한 권한수정도 통하지 않는 경우가 있습니다. 이런 경우 SuperUser 권한으로 nobody권한을 다시 조정해 줘야 합니다.


다른 서버 계정으로 이사가기

위의 과정은 같은 서버의 계정에서 필요에 따라 계정을 백업하거나 복원할 때 사용하는 방법입니다. 그럼 다른 서버의 계정으로 이사를 가야 한다면 어떻게 할까요?

image

백업된 디렉터리 압축파일과 DB에게서 받아 두었던 sql 문서를 복원하는 방법은 위와 동일합니다. 다만, 새로운 서버의 설정값들이 변경되기 때문에 이에 따른 수정할 부분이 추가됩니다. 우선 최상위 디렉터리(root)의 이름이 html이 아니라고 한다면 FTP로 업로드한 후 압축을 풀었을 때 html 디렉터리 안에 모든 파일과 폴더가 풀어져 있습니다. 이것을 새로 이사 간 서버의 루트 디렉터리(public_html 또는 www) 안으로 옮겨 주어야 합니다. 이때 사용하는 명령어는 아래와 같습니다.

mv html/* public_html

html 안의 모든(*) 파일과 폴더를 public_html 디렉터리 안으로 이동하라!(move) 는 뜻입니다. 완료가 되면 FTP를 이용해서 xe 디렉터리 안에 .htaccess 파일이 제대로 있는지도 확인해 보시고 재 확인차 chmod 707 xe 명령을 이용해 권한설정을 한번 더 확인해 줍니다.

TIP 1 - 리눅스 명령어 mv 에서 와일드카드(*)를 사용하면 도트(.)로 시작되는 파일이름(숨김파일)을 포함하도록 확장되지 않습니다. 이런경우 [mv 디렉터리/* 이동할 디렉터리] 와 [mv 디렉터리/.htaccess 이동할 디렉터리] 이렇게 2번 나누어서 실행하거나 또는 [mv 디렉터리/{*,.htaccess} 이동할 디렉터리/]처럼 여러 대상을 포함시켜 이동할 수 있습니다. 아래 예제와 같이 명령어를 실행하면 .htaccess 파일도 함께 이동할 수 있습니다.
예제) mv html/{*,.htaccess} public_html/
또는 mv html/{*,.*} public_html/ 도 같은 역할이지만 서버환경 옵션설정에 따라 허용되지 않을 수 있습니다.
숨김파일은 ls -a 옵션을 사용하여 확인할 수 있습니다.

TIP 2 - 숨김파일까지 한꺼번에 이동하려면 shopt -s dotglob 명령어를 우선 실행한후 mv 명령어를 이용해 와일드카드(*)를 사용하면 한번에 이동이 가능합니다.
shopt -s dotglob
mv html/* public_html/

그리고 다른 서버로 이사를 간 경우에는 XE 코어가 이전 서버에서 사용했던 xe/files/cache 디렉터리가 더이상 필요없습니다. 새로운 설정값을 다시 만들어야 하기 때문에 rm -rf cache 명령을 이용해 cache 디렉터리를 완전히 삭제해야 합니다.

★중요★
새로운 서버의 아이디와 DB네임으로 DB를 복원한 후에는 반드시 /xe/files/config/db.config.php 문서를 FTP를 이용해 서버에서 내려받고 그 안에 적힌 이전 서버의 내용을 새로운 서버의 아이디와 비밀번호, DB네임, 사이트 주소 등을 수정하여 XE 코어에게 이곳은 새로운 서버라는 것을 알려 주세요. 만약 아래 내용처럼 수정을 하여 업로드 한 후에도 문제가 발생하게 되면 설정 중에 localhost 등과 같이 기타 서버에서 사용하는 설정 방법을 호스팅사에 문의하여 수정해야 합니다.

db.config.php 파일 수정 :

<?php if(!defined("__ZBXE__")) exit();
$db_info->master_db = array('db_type' => 'mysql','db_port' => '3306','db_hostname' => 'localhost','db_userid' => 'DB아이디','db_password' => 'DB비밀번호','db_database' => 'DB이름','db_table_prefix' => 'xe_');
$db_info->slave_db = array(array('db_type' => 'mysql','db_port' => '3306','db_hostname' => 'localhost','db_userid' => 'DB아이디','db_password' => 'DB비밀번호','db_database' => 'DB이름','db_table_prefix' => 'xe_'));
$db_info->default_url = 'http://홈페이지 URL/xe/';
$db_info->lang_type = 'ko';
$db_info->use_rewrite = 'Y';
$db_info->time_zone = '+0900';
?>
  • 'db_hostname' => 'localhost'
  • 'db_userid' => 'DB아이디'
  • 'db_password' => 'DB비밀번호'
  • 'db_database' => 'DB이름'

db.config.php 파일을 수정한 후 다시 업로드하여 원본 파일을 덮어씌운 후에 관리자로 로그인하게 되면 반드시 캐시파일을 재생성하여 변경된 서버 계정의 환경 설정값들을 새로운 캐시파일로 생성하도록 하고 XE 코어와 DB가 연동하게 되면 XE 포장이사는 무사히 마치게 됩니다. 만약 /xe/files/cache 디렉터리가 rm -rf 명령어로도 삭제되지 않는다면 호스팅 회사에 문의하여 삭제를 요청하시면 곧바로 삭제를 해 줍니다.


포장이사 도움말

XE 코어의 백업과 복원, 서버 계정의 이전은 그리 쉬운 작업은 분명히 아닙니다. 왜냐하면 같은 계정 안에서의 백업 및 복원작업은 상대적으로 문제가 적은 반면에 다른 서버의 계정으로 이사를 가는 것은, 이사라는 일이 늘 그렇듯 그릇이 깨지기도 하고 가구에 스크레치가 나기도 하는 등 새로운 문제점들이 늘 발생할 수 있습니다. 새로운 서버의 설정과 운영에 따라 문제가 발생된 경우에는 호스팅사의 도움을 요청하는 것이 바람직합니다.

★ 무작정 XE를 백업 받고 새로운 서버로 이사를 가기보다는 호스팅 회사에 문의를 하여 백업 받은 XE 코어를 복원할 수 있는지에 대한 여부와 환경 설정에 필요한 자문을 구하는 것이 바람직합니다. 일반적인 경우 호스팅 서비스 회사는 이에 대한 안내를 자세히 해주며 백업파일이 있는 경우 호스팅 회사가 무료로 직접 압축파일을 해제하고 복원 해 주기도 합니다.

일반적인 문제발생의 원인은 이전 서버에서 파일 및 폴더을 압축할 때 nobody 권한에 따른 설정들이 새로운 서버에서 제대로 적용되지 않기 때문에 작은 문제들이 발생 되곤 한답니다.(호스팅 회사의 안내) 따라서 XE 코어 운영에 최적화된 좋은 호스팅 서비스 회사를 선택하고 XE 코어의 백업 파일을 제대로 포장한 후에 서버 이전을 진행하는 것이 가장 확실한 방법임을 추천합니다.
(※ 위와 같은 기본적인 텔넷 명령어들이 받아들여지지 않는 서버 계정은 추천하지 않습니다.)