더북(TheBook)

초보 시스템 관리자의 일기 | 워드프레스(웹 문서와 데이터베이스) 백업하기

워드프레스는 대시보드에 백업 메뉴가 있어서 콘텐츠를 파일로 내보내서 저장할 수 있다.

그림 12-19 워드프레스에서 콘텐츠를 파일로 내보내 저장하기

하지만, 바쿨라를 이용해서 백업을 자동화하려면 다른 방법이 필요해 보인다. 선배가 알려준 힌트는 MySQL에서는 mysqldump를 이용해서 데이터베이스를 쉽게 백업할 수 있다는 사실이다.

mysqldump -u[사용자] -p[패스워드] [데이터베이스 이름] > [파일명] 형식으로 입력해서 블로그 데이터베이스를 저장해보자. 패스워드가 ‘******’인 사용자가 ‘root’의 데이터베이스 jamesblog를 백업하려면 다음과 같이 입력한다.

administrator@server01:~$ mysqldump -uroot -p****** jamesblog > jamesblog.sql
administrator@server01:~$ ls -al
...
-rw-rw-r-- 1 administrator administrator 403641 Sep 4 01:14
jamesblog.sql

참고로 백업한 파일을 이용해서 데이터베이스를 복원하는 방법도 배웠다. 파일 스트림의 방향이 ‘>’ 대신 ‘ <’로 바뀐다는 사실에 주의해야 한다.

administrator@server01:~$ mysql -uroot -p****** jamesblog < jamesblog.sql

mysqldump로 데이터베이스를 백업하는 셸 스크립트를 만들어봤다.

administrator@server01:~$ sudo vi /usr/local/bin/mysqlbackup

스크립트 내용 자체는 간단하다. 백업 대상 디렉터리에 이전에 저장해둔 데이터베이스 파일이 존재하면 rm으로 삭제하고, mysql 명령을 사용해서 데이터베이스를 조회하고 dblist에 저장한다. 이때 명령을 실행해서 변수에 바로 집어넣기 위해 mysql 명령은 역따옴표( `)로 묶는다는 사실에 주의해야 한다.

for 문으로 데이터베이스 이름이 MySQL의 기본 데이터베이스(information_schema, mysql, performance_schema)인지 조회하고 아닌 경우, 즉 사용자가 생성한 데이터베이스인 경우는 mysqldump 명령으로 백업한다. $dbname.sql 대신 ${dbname}.sql해서 백업 파일 이름을 지정했다.

#!/bin/bash
backupdir="/var/dump/mysql"
user=root
pw=******
rm -f $backupdir/*.sql
dblist=`mysql -u$user -p$pw -e "show databases" | tail -n+2`
for dbname in $dblist
do
 if [ "$dbname" != "information_schema" -a "$dbname" != "mysql" \
    -a "$dbname" != "performance_schema" ]; then
   mysqldump ?u$user -p$pw $dbname > $backupdir/${dbname}.sql
 fi
done

데이터베이스 백업 파일을 저장할 디렉터리를 생성하고 스크립트에 실행 권한을 부여( chmod a+x)해서 실행하면 워드프레스가 생성한 블로그 데이터베이스가 저장될 것이다.

administrator@server01:~$ sudo mkdir -p /var/dump/mysql
administrator@server01:~$ sudo chmod a+x /usr/local/bin/mysqlbackup
administrator@server01:~$ sudo mysqlbackup 
administrator@server01:~$ ls -l /var/dump/mysql/
-rw-r--r-- 1 root root 403641 Sep 6 02:57 jamesblog.sql
-rw-r--r-- 1 root root 388466 Sep 6 02:57 linuzine.sql
-rw-r--r-- 1 root root 395668 Sep 6 02:57 shinblog.sql

계획은 간단하다 워드프레스로 운영 중인 웹 서버에 바쿨라 파일 데몬을 설치하고 웹 문서 디렉터리와 워드프레스 데이터베이스 파일을 모아서 스토리지에 증분 백업할 예정이다. 먼저 웹 서버에 바쿨라 파일 데몬 패키지를 설치한다.

administrator@server01:~$ sudo apt-get install bacula-client

파일 데몬 설정 파일 ‘bacula-fd.conf’를 vi로 연다.

administrator@server01:~$ sudo vi /etc/bacula/bacula-fd.conf

디렉터 정보를 수정한다. 여기 입력하는 패스워드는 디렉터 Client 섹션의 패스워드와 일치해야 한다.

Director {
  Name = losttemple-dir
  Password = "password"
}

파일 데몬 섹션에서 파일 데몬의 이름과 주소를 설정한다.

FileDaemon {
  Name = server01-fd
  FDport = 9102
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = 192.168.122.201
}

파일을 저장하고 파일 데몬 서비스를 다시 시작한다.

administrator@server01:~$ sudo service bacula-fd restart

디렉터의 접근을 허용하기 위해 9102포트를 열어야 한다는 사실을 잊지 말자.

administrator@server01:~$ sudo ufw allow 9102

디렉터가 실행되고 있는 호스트로 돌아와서 새로운 게스트에 대한 백업 설정을 추가하자.

shinjaehun@losttemple:~$ sudo vi /etc/bacula/bacula-dir.conf
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.