이 글에서는 솔라리스10 에서 운용되고 있는 PostgreSQL 을 정기적으로 백업하는 방법과 이것을 다른 솔라리스 시스템에 저장하는 법에 대해 설명합니다. 반드시 아래의 단계들을 따라야 합니다.
주의: 필자는 데이베이스 시스템을 위해 솔라리스10을 사용했고 백업 시스템에서는 솔라리스10 11/06 배포판을 사용했습니다. PostgreSQL 8.2.4 가 사용 되었습니다.
백업을 위한 데이타베이스 사용자 생성하기
CREATE USER 커맨드를 이용해서 새로운 유저를 만듭니다. 예를 들어: CREATE USER backupuser ENCRYPTED PASSWORD 'user_password''
유저에게 GRANT SELECT 커맨드를 이용해서 백업하고자 하는 데이타베이스의 관계에 읽기 권한을 줍니다.
pg_hba.conf 데이타베이스 설정 파일을 수정해서 새로운 유저가 UNIX 의 도메인 소켓 접속을 통해 접속이 가능하도록 허락 합니다. 아래의 라인을 추가 합니다:
local database_name backupuser trust
이 설정을 통해서 신뢰되는 유저는 로컬 유닉스 프롬프트에서 패스워드 입력 없이 접속 할 수 있을 것입니다. 데이타베이스 머신으로 접속 할 수 있는 시스템 유저들은 주의 하시기 바랍니다. (오직 매니저 만이 실제 운영 데이타베이스 서버에 접근해야 합니다).
postmaster 프로세스에 변경된 설정을 다시 읽도록 신호를 줍니다:
/usr/local/pgsql/bin/pg_ctl reload
백업이 전송되고 저장될 서버에 유저를 생성합니다.
데이타베이스 서버에서 오는 백업을 저장하는데 사용될 시스템 유저를 생성해야 합니다.
넉넉한 디스크 공간이 있는 파티션에 홈 디렉토리를 설정합니다.
유저의 홈 디렉토리에 group 과 other 권한들을 모두 제거 합니다.
접속을 위한 보안 파일을 생성하고 전송합니다.
데이타베이스 서버 머신에서 postgres 시스템 유저를 사용해서 다음의 명령을 실행시킵니다:
ssh-keygen -t rsa
생성된 파일 ~/.ssh/id_rsa.pub 를 수신자 서버로 복사 합니다. 보안을 위해서 파일 업로드에는 sftp 를 사용합니다.
수신자 머신에서 전송된 파일을 이동하고 이름을 변경 합니다:
mv id_rsa.pub ~/.ssh/authorized_keys
스크립트 준비하기
아래와 같은 스크립트를 이용할 수 있습니다:
#Variable with the backup filename
date '+FILENAME=%Y-%m-%d-%H_%M_%S.sql' > pgbak.tmp.sh
echo "export LD_LIBRARY_PATH=/usr/lib:/lib:/usr/sfw/lib:/usr/local/lib" \
>> pgbak.tmp.sh
echo "export PATH=/usr/bin:/usr/ucb:/etc:.: \
/opt/sfw/bin:/usr/sfw/bin:/usr/local/pgsql/bin" >> pgbak.tmp.sh
echo "pg_dump -U backupuser database_name > \$FILENAME" \
>> pgbak.tmp.sh
echo "gzip \$FILENAME" >> pgbak.tmp.sh
echo "chmod go-rwx \$FILENAME.gz" >> pgbak.tmp.sh
echo "chmod u-w \$FILENAME.gz" >> pgbak.tmp.sh
echo "rsync --rsh=\"/usr/bin/ssh -i /home/postgres/.ssh/id_rsa\" \
\$FILENAME.gz system_user@RECEIVER_SERVER_IP_ADDRESS:/home/system_user" \
>> pgbak.tmp.sh
echo "rm -f \$FILENAME.gz" >> pgbak.tmp.sh
chmod u+x pgbak.tmp.sh
/usr/bin/bash ./pgbak.tmp.sh
################## end of script ###################
데이타베이스 서버가 유저 postgres 에 의해 실행되고 있고 홈 디렉토리가 / home/. 에 위치한다고 가정 합니다. 데이타베이스 이름, 서버 IP 주소 그리고 시스템 유저 이름을 여러분 고유의 값들로 변경하시기 바랍니다.
스크립트는 데이타베이스 주소를 저장하는 파일을 현재의 일시 파일 이름과 sql 확장자로 하는 임시 파일 을 생성합니다. 임시 파일은 스크립트의 제일 마지막에 실행되어서 다음과 같은 작업들을 완료 합니다:
- 환경 변수
LD_LIBRARY_PATH와PATH설정. - 데이타베이스 유틸리티 커맨드
pg_dump를 호출하고 출력 값을 새로운 SQL 파일로 보냄. - SQL 파일을
gzip을 이용해서 압축함. - 암축된 파일을 rsync 와 SSH 를 이용해서 전송.
스크립트를 /home/postgres/bin/database_backup.sh 으로 저장하고 파일 퍼미션에 유저 실행 권한을 추가해 줍니다:
chmod u+x /home/postgres/bin/database_backup.sh
터미널에서 스크립트를 실행 시켜 봅니다.
커맨드 /home/postgres/bin/database_backup.sh 을 실행시켜서 스크립트를 테스트 합니다.
종종 rsync 가 아래와 같은 에러를 발생시킬 때가 있습니다:
bash:rsync:command not found
수정을 위해서 여러분은 rsync 전송자와 수신자 서버의 /usr/bin 안에 rsync 의 심볼릭 링크를 생성해야 합니다:
ln -s /opt/sfw/bin/rsyn /usr/bin
만약 rsync 가 /opt/sfw/bin 에 설치되어 있지 않다면 type rsync 커맨드를 이용해서 설치된 장소를 찾아 보시기 바랍니다.
주기적인 작업으로 설정하기
자동으로 커맨드를 실행시키기 위해서는 crontab 에 새로운 작업으로 등록해야 합니다.
postgres 유저를 이용해서 터미널을 열고 EDITOR 환경 변수를 설정합니다:
export EDITOR=vi
아래의 커맨드를 이용해서 유저의 crontab 을 수정 모드로 엽니다 (텍스트 에디터 vi 를 이용해서) :
crontab -e
유저의 crontab 을 아래의 내용을 추가하여 수정합니다:
0 22 * * * /home/postgres/bin/database_backup.sh
여기서 백업은 매일 22시에 실행됩니다. 다른 설정을 원한다면 cron 설명서를 참조하시기 바랍니다.
데이타베이스 서버 전체를 백업하기 (선택사항)
만약 전체 데이타베이스 서버를 백업하고자 한다면 (즉 모든 데이타베이스) pg_dump 대신 pg_dumpall 유틸리티를 사용해야 하고 백업 유저가 모든 데이타베이스에 접근 할 수 있도록 pg_hba.conf 파일 을 수정해야 합니다.
이 아티클의 영문 원본은
http://www.sun.com/bigadmin
에서 볼수 있습니다.



전체

댓글을 달아 주세요
댓글을 쓰시려면 로그인해주세요.