[DB][MySQL] mysqldump 를 이용하여 백업하기 (쉘 스크립트, Backup by bash) MySQL

서비스를 돌리다 보면 분명 DB 를 어처구니 없는 실수로 날려먹거나,
잘못된 데이터를 넣거나 이상하게 업데이트를 했더나.. 여튼.. DB를 망치는 경우가 있다.

서비스에 나가고 있는 당시의 DB는 매우 중요한 정보 !!!
이것을 제대로 관리 하지못하면 막심한 손해를 입을 수도 있다.

그래서 가장 간단하게 일반적으로 많이 쓰이는 MySQL 데이터 베이스의 백업 스크립트를 하나 만들어보았다.
아래의 백업 스크립트는 2가지 일을 한다.

1. 특정 DB의 모든 테이블 데이터를 LOG_PATH (폴더)에 {날짜}-myapp.sql 이라는 파일로 덤프한다.

2. 해당 LOG_PATH 에 오늘로부터 7일 이상된 과거 덤프 파일들을 삭제한다.
  - 이 작업은 로그 폴더에 일정한 기간동안의 복사본만 남아있도록 한다.

=====<~/dumps/db-dump.sh>==========================================

#덤프파일을 저장할 Dir 지정
LOG_PATH=/home/users/shiwoo/dumps/myapp

#오늘날짜 덤프파일 생성
DATE=`date +%Y%m%d-%H%M%S`
echo "Start copy myapp database : $DATE"
mysqldump -uDB_USER -pDB_PWD DB_NAME > $LOG_PATH/$DATE-myapp.sql
DATE=`date +%Y%m%d-%H%M%S`
echo "Finished copy myapp database : $DATE"

# 오래된 덤프파일은 삭제
DAY_LIMIT=7
echo "Start remove copies older than $DAY_LIMIT"
find $LOG_PATH* -mtime +$DAY_LIMIT -exec rm {} \;
echo "Removed copies older than $DAY_LIMIT"

===========================================================
※ 빨간 부분은 DB 정보를 직접 넣어야 한다.


+++ 그리고 추가 꿀팁!

나는 이것을 crontab 이라는 리눅스 내장 스케줄 executor 를 사용하여 관리 하였다.
매일 오전 4:30am 에 1번 스크립트가 실행되도록 하는 crontab 설정은 아래와 같다.

# 아래의 명령으로 크론탭 설정으로 들어갈 수 있다.
$> crontab -e 

<크론탭 설정>

# 분 | 시간 | 날짜 | 달 | 요일 | 사용자 | 명령

# everyday 4:30am
30  4  *  *  * ~/dumps/db-dump.sh

# 내용입력이 끝낫으면 저장 후 종료
:wq

===========================================================

간단하지 않은가? 이걸로 MySQL DB 백업걱정은 끝이다.

백업을 시작하게 되면 많은 양의 데이터를 읽어들여야 하고 Lock 이 걸리는 테이블도 있을 것이므로
DB 요청이 느려질 수 있다. 이는 원활한 서비스에 문제가 될 수 있으므로 미리 준비하자.

데이터 양과, 서비스의 사용 시간대를 잘 파악하여, DB 단위 혹은 테이블 단위로 백업 스케줄을 현명하게 잘 짜는것이 중요하다.

끝!




통계 위젯 (블랙)

936
546
360313

GoogleAdsenseResponsive

Cluster map