2010년 8월 19일 목요일

Crontab과 쉘스크립트를 이용한 DB백업업

root 아래에 backup.sh 라는 스크립트를 작성한다.

# vi /root/backup.sh

이후 아래 내용을 기재해 준다.

#!/bin/bash
/usr/local/server/mysql/bin/mysqldump -uroot -p비밀번호 mysql > /backup/mysql_db_bak_$(date +%Y%m%d).sql
/usr/local/server/mysql/bin/mysqldump -uDB계정 -p비밀번호 sskim > /백업경로/백업파일명_db_bak_$(date +%Y%m%d).sql
mv *.sql /이동경로
tar cvfpz mysqlbackup.tar.gz /backup/*
tar cvfpz 압축파일명.tar.gz /압축된 백업파일 저장위치/
find /backup -ctime +3 -exec rm -f {} \;

내용을 설명하자면..
#!/bin/bash   -> 쉘 스크립트를 생성
/usr/local/server/mysql/bin/mysqldump -uroot -p비밀번호 mysql > /backup/mysql_db_bak_$(date +%Y%m%d).sql
-> mysql이 설치된 곳에 mysqldump를 이용하여 백업을 진행
mv *.sql /backup
-> 모든 .sql 파일을 /이동경로로 옮김
tar cvfpz mysqlbackup.tar.gz /backup/*
-> 백업된 파일을 tar를 이용하여 지정한 위치로 압축
find /backup -ctime +3 -exec rm -f {} \;
-> 날짜를 체크하여 3일이 경과된 파일을 찾아 삭제

내용은 대충 이렇다. ㅡ.ㅡ;;

이후 :wq 를 이용하여 저장

# chmod 100 /root/backup.sh
명령을 통하여 권한을 부여한다. (즉 이 파일은 수정하지 못하게 함. ^^;)

# crontab -e
명령어 이후에 아래 내용을 삽입
00 06 * * * /root/backup.sh
-> 이내용은 매일 6시에 백업을 진행하라는 뜻.

위와 같이 진행한 이후
/var/spool/cron/root 가 있다면 정상적으로 된 것임.

확인은 경로로 지정한 폴더에 가보면 정상적으로 백업이 되어 있다는 것...

만약 안된다면....
# /etc/init.d/cron restart
를 이용하여 재시작 후 다시 한번 정상적으로 되는지 확인한다.



복구 방법

# mysqldump -u db계정 -p 백업할 db_name > 파일명

위 명령어 실행 후 passward 입력후 db 복구 완료


----------------------------------------------------------
특정 테이블만 백업할 때
>> msqyldump -u root -p -e [database] [table] > backup.sql
모든 데이터베이스
>> msqyldump -u root -p -e --all-databases > backup.sql

특정 데이터베이스
>> msqyldump -u root -p -e --databases [database1] [database2] > backup.sql

복구할 때
>> mysql -u root -p < backup.sql
----------------------------------------------------------

댓글 없음:

댓글 쓰기