시스템 운영자라면 가장 중요한 업무중에 하나로 꼽는것이 바로 백업일 것이다. "복구에 실패한 DBA는 용서해도 백업에 실패한 DBA는 용서 할 수 없다"는 모 강사님의 말씀처럼 백업의 중요성은 백번을 강조해도 과함이 없습니다.
 규모가 큰 업체라면 티볼리같은 백업 솔루션을 사용하기도하지만, 일반적인 중소기업에서는 백업을 위한 스토리지 확보도 힘든게 현실이죠.

 이 문서에서는 간단한 로컬 백업에서부터 넷트워크를 이용해서 분산 백업하는 방식 및 이와 관련된 사항들을 설명하고 있습니다. 백업을 위한 스토리지를 확보했다면 이제 백업을 실습해보고 실무에 적용해보는 것도 좋겠죠.


원본 : 리눅스에서 백업 자동화하기(쉽게 할 수 있는 보안 분산 넷트워크 백업 DIY)

매우 중요한 데이터 손실은 굉장히 파괴적입니다. 그럼에도 수많은 전문가가 데이터 백업을 무시합니다. 이유야 제각기 다양하겠지만 가장 공통적인 해명은 판에 박힌 백업 수행이 정말 허드렛일이라는 것입니다. 기계는 평범하고 반복되는 일을 하는 데 탁월하므로 본래부터 단조로운 일과 사람의 선천적인 미루는 성향을 줄이는 핵심은 백업 과정을 자동화하는 것입니다.

리눅스를 사용한다면 맞춤 백업 솔루션을 만드는 데 필요한 굉장히 강력한 도구에 접근할 수 있다. 이 글에서 다룰 솔루션은 간단하면서 좀 더 진보적이고 안전한 네트워크 백업을 수행하는 데 도움이 될 것이다. 이 일을 하는 데는 거의 모든 리눅스 배포판의 일부로 들어 있는 오픈 소스 도구를 사용할 것이다.


 오늘도 삽질이 계속 되고있습니다. 단순히 백업해둔 파일로 새로운 인스턴스를 띄워서 예전 테이블들을 백업하는 작업이었는데요... 암튼... 속도도 예상보다 많이 느리고... 티볼리 데몬에도 문제가 생기는 등 갖가지 난관에 봉착했습니다. ㅜ.ㅜ

암튼... 이 모든 작업을 하기전에 먼저 확인할 내용이 있죠. 현재 백업하려는 테이블 들의 총 용량이 얼마나 되는지 입니다. 이걸 알아야 백업한 파일을 어디에 저장할 건지 그리고 백업을 어떻게 할건지를 결정할 수 있겠죠. 그래서 이것 저것 알아보다가 정확하진 않지만 알아보는 쿼리를 얻었습니다. 제가 정확한 결과를 찾겠다며 헤메고 있자, 사수님이 준 쿼리입니다. ^^;
꼭 정확한 사용량을 알아야 겠다면 통계자료를 수집하도록 한 뒤에 dba_tables같은 View를 이용하면 되겠지만, 서버에 부하를 주는 작업을 할 수 없는 상황이라면 아래와 같은 쿼리문으로 대략적인 사용량을 알아 볼 수 있습니다.


SELECT   owner,segment_type, tablespace_name, SEGMENT_NAME, SUM(BYTES/(1024*1024))  SIZE_IN_MEG
FROM DBA_SEGMENTS
WHERE tablespace_name IN (SELECT tablespace_name FROM DBA_TABLESPACES WHERE owner NOT IN
  ('SYS','SYSTEM','PUBLIC','OUTLN','WMSYS','ORDSYS','ORDPLUGINS','MDSYS','CTXSYS'
,'XDB','WKSYS','OLAPSYS'))
--GROUP BY rollup( owner,segment_type,tablespace_name,SEGMENT_NAME)
GROUP BY owner,segment_type,tablespace_name,SEGMENT_NAME
ORDER BY SIZE_IN_MEG DESC


위의 쿼리문을 적당히 고치면 원하는 내용을 얻을 수 있습니다.원하는 테이블만, 혹은 원하는 유저의 테이블만... 같은 조건을 주면 됩니다.
흔히들 말하는 LAMP(Linux, Apache, MySQL, PHP) 환경의 웹서버 한대가 회사 전산실에 있습니다. 관계사의 홈페이지들이 있는데, 리눅스 마스터 자격증이 있다는 점과 PHP 개발 경력이 있다는 이유로 제가 관리를 맡았다가 다른 사람에게 넘겼는데 문제만 생기면 제가 손을 봐야하는 서버입니다.

오늘도 사이트 관련해서 볼일이 있어서 SSH로 로그인했었는데, 갑자기 백업용 Shell script를 어떻게 만들었는지 기억이 안 나더군요. 음... 한동안 안 썼더니 Shell script 작성법을 까먹어버렸었다는...
그래서 백업용으로 만들었던 Shell script를 블로그에 남깁니다. 음... 이러면 안 까먹겠죠. ^^


[root@host명 ~/util]
08:29 오후 # cat mysql_dump.sh
#!/bin/bash
# mysql_dump.sh
LOG="/home/db_backup_log/mysql_dump"

today=`date +%Y%m%d`
datetime=`date +'%Y%m%d_%H:%M:%S'`

echo "===================="
echo $datetime >> $LOG

# backup 1. DB이름
mysqldump -u root -p비밀번호 DB이름 > 파일명-$today.sql
#echo DB이름 backup completed!!

# make tarball
tar cvfz /var/www/html/db_backup/db-$today.tar.gz *-$today.sql >> $LOG

# delete the sql file
rm -f *-$today.sql >> $LOG
echo finish!! >> $LOG

datetime=`date +'%Y%m%d_%H:%M:%S'`
echo $datetime >> $LOG
echo "===================="


[root@host명 ~/util]
08:29 오후 # cat apache_log_backup.sh
#!/bin/bash
# apache_log_backup.sh
LOG="/home/apache_log_backup/backup_log"

today=`date +%Y%m%d`
datetime=`date +'%Y%m%d_%H:%M:%S'`

echo "=====================" >> $LOG
echo $datetime >> $LOG

# stop httpd
service httpd stop >> $LOG

# make tarball
tar cvfz /home/apache_log_backup/httpd_access_log-$today.tar.gz /var/www/html/log/access* >> $LOG

tar cvfz /home/apache_log_backup/httpd_error_log-$today.tar.gz /var/www/html/log/error* >> $LOG

# delete log file
rm -f /var/www/html/log/* >> $LOG
echo finish!! >> $LOG
service httpd start >> $LOG

datetime=`date +'%Y%m%d_%H:%M:%S'`
echo $datetime >> $LOG

service httpd start >> $LOG
echo "=====================" >> $LOG


너무 허접한가???

+ Recent posts