본문 바로가기
운영체제/리눅스

DB(MySQL) 백업 스크립트

by o테리o 2011. 7. 8.
여러분의 jjcom 들은 어떤지 모르겠습니다만,

iccc 같은 경우엔 우리 컨설턴트 홈페이지가 db 에 저장되있기 때문에,

db 날아가면 끝장입니다.

그래서, 정기적으로 디비 백업을 하고 있는데요,

MySQL 에서는 data 디렉토리만 백업해도 복구할때 덮어씌워주면

됩니다만, 그래도...뽀대가 있지~ SQL 을 dump 하는 식으로

제대로 한번 백업 해봅시다.

그리고,정기적으로 자동백업 하게 하기 위해 cron 에 등록하거나..뭐 다른 방법있으면 그렇게 해봅시다.

아래 스크립트는 SQL 의 모든 디비를 백업하게 짜놨습니다.

설명은 밑에

#!/bin/sh

dir=/export/home/kdsoo/backup/db

time=`date +%Y%m%d%H`

/usr/local/mysql/bin/mysqldump -Al -u root -p패스워드 > $time".sql"

tar czf $dir"/"$time".tar.gz" $time".sql"

rm -rf $time".sql"

find $dir -atime +2 -print -exec rm -rf {} ;

dir= 의 부분은 백업 받은 디비를 저장할 곳이며, 반드시 그 디렉토리가 만들어져 있어야합니다.

time= 은 년도/달/일/시간 의 형식으로 표시해주기 위함입니다.

mysqldump 명령 라인에서 -A 는 모든 디비를 뜻하며, l 은 읽기 락을 걸기 위함입니다. >$time".sql" 은 위에서 정의한 time 형식.sql 의 sql 파일로 백업을 받겠다는 뜻입니다.

여기서 sql 파일은 이 스크립트를 실행한 디렉토리에 생깁니다.

tar 라인은 백업 받은 sql 을 tar 로 묶고 gzip 으로 묶기 위한 옵션입니다.(c 가 tar 로 묶고 z가 gzip 입니다) 묶은 파일은 dir 에 저장됩니다.(위에서 정의한 백업 디렉토리)

rm 라인은 지금 이 스크립트를 실행한 디렉토리에 sql 파일이 생기므로,tar 문으로 그 파일을 백업 디렉토리로 옮겨 묶었으므로,

스크립트를 실행한 디렉토리에 있는 원본 sql을 지우는 명령입니다.

find 부분은 백업디렉토리 내에 백업받는 sql중 백업한지 3일이

지난 파일을 삭제 해주는 라인입니다.

-atime +2 로 기간을 정해줄수 있죠.

위의 스크립트를 사용시주의점은 스크립트 파일 안에 디비 루트의 패스워드가 들어가므로 퍼미션을 700 등 자신만이 볼수있게 하고 dir 로 정의한 백업 디렉토리는 반드시 스크립트 실행전에 만들어야하고 이 디렉토리 역시 퍼미션이 700 이어야 합니다.

궁극적으로는 보안상 안전하지 못한 스크립트입니다.

잘 숨기고 사용하시던지 하시구요.

크론에 등록하시고 매일 실행되게 하시면 편합니다.

크론탭에 등록 하시려면...스크립트 파일의 보안을 확실히 지켜주세요.

출처 : http://scg.skku.ac.kr/xe/index.php?document_srl=48676&mid=tip_tech_service&sort_index=readed_count&order_type=desc