사이트 내 전체검색
[linux] 로컬백업지침 ver 1.0
로빈아빠
https://cmd.kr/server/452 URL이 복사되었습니다.

본문

로컬백업지침 ver 1.0
 
아래의 로컬백업지침은 원격백업지침의 기초가 됩니다.

1. 준비사항
    1) 운영중인 하드디스크와는 별도로 백업하려는 Data 용량의 최소 4배 이상되는
        하드디스크를 준비한다.
    2) 백업하드디스크의 용량이 남을지라도 백업 용도외에는 사용하지 않는다.
    3) 백업하려는 데이타 항목을 선정하여, 백업디렉토리를 트리구조화 한다.

2. 백업방법
  1) 변경이 적은 데이타(홈페이지 파일) : 일주일에 한 번 데이타 풀백업과 일일 증분백업
  2) 변경이 잦은 데이타(DB 파일) : 일일 풀백업 또는 1시간 간격으로 백업을 실행한다.
  3) 시스템 설정파일(/etc, /var 등) : 일일 풀백업   

3. 백업후 점검사항
  1) 최소 1주에 한 번은 full backup file을 개인 PC에 다운로드하여 CD로 구워서 보관한다.
  2) 백업후에는 백업된 파일의 압축을 풀어서 원본 데이타의 용량 및 파일 수량을
      비교하여 백업파일이 정상인지 확인한다.
  3) 백업압축명령어로 이용되는 tar는 파일의 퍼미션이나, 파일시스템의 에러로 인하여
      파일 리스트를 읽어들이지 못하는 경우 해당 파일이나 디렉토리를 묶을시 SKIP함으로
      반드시 3-2)항목을 점검한다.
  4) 백업후 백업하드디스크 용량을 체크하고, 로그메세지를 주기적으로 점검한다.

4. 백업예
  1) 백업대상 : MySQL , 웹데이타 파일 , apache 설정파일, 시스템설정파일
 
  2) 백업 디렉토리 구조
      주간 풀백업용    : /backup/weekly
      일일 증분백업용  : /backup/daily
      MySQL dump 백업용 : /backup/mysqldump
 
  3) MySQL data 백업
      백업방법 : dump 파일로 저장
      저장위치 : /backup/mysqldump
      백업주기 : 시간별(/etc/cron.hourly) 또는 일별(/etc/cron.daily)
      보관기간 : 7일
      백업스크립트 : 아래 예제 6-1). 참조
 
  4) 웹데이타 백업(/home)
      백업방법 : 압축파일로 저장
      저장위치 : /backup/weekly/home, /backup/daily/home
      백업주기 및 보관기관 : 주간 풀백업(15일 보관), 일일증분백업(7일보관)
      백업스크립트 : 아래 예제 6-2) ~ 3). 참조 
 
  5) 시스템 설정파일(/etc, /var, /usr/local/apache)
      저장위치 : /backup/daily/system
      백업주기 : 일일 풀백업
      보관기간 : 7일
      백업스크립트 : 아래 예제 6-4). 참조 
 
  6) 위의 백업방법으로 실행할 경우 풀백업 데이타는 3개 이상의 백업본이 존재하게 된다.

5. backup 계정 생성
    backup 계정을 생성하여 백업후 생성된 백업파일을 개인 PC로 다운로드하여
    별도 보관하거나, 백업상태를 FTP에서 수시 확인한다.

  # useradd -g100 -d /backup backup

6. 백업스크립트 예제

1) MySQL dump
    아래 [1]~[10]항목을 서버설정에 맞도록 수정한다.
    /etc/cron.daily 또는 /etc/cron.hourly 에 저장후 실행권한( chmod 700 dbdump.cron )을 준다.

==========================================================
#!/bin/sh find /backup/mysqldump/ -ctime +7 -exec rm -f {} ; ## /etc/cron.daily/dbdump.sh 로 저장후 ## chmod 700 /etc/cron.daily/dbdump.sh 퍼미션을 반드시 변경한다. ## ## 디버깅명령 : sh -xv dbdump.sh ## ########################################################### ## << 설정 시작 >> ## ## [1] MySQL DB를 백업할까요? ## 1 = yes(DB를 백업합니다.) ## 0 = no (DB를 백업하지 않습니다.) mysql_dbdump="1" ## [2] MySQL이 가동중이지 않을 경우에 메일로 알림 ## #reportmailto="webmaster@100dedi.com" ## [3] 기본 백업디렉토리 설정 ## backupdir="/backup" ## [4] MySQL DB 서버 ## mysql_host="localhost" ## [5] MySQL DB root 암호 ## mysql_rootpasswd="password" ## [6] MySQL DB dump 디렉토리 ## mysql_backupdir="${backupdir}/mysqldump" ## [7] MySQL DB 프로그램 ## mysql_dump="/usr/local/mysql/bin/mysqldump" mysql_show="/usr/local/mysql/bin/mysqlshow" ## [8] dump한 DB를 압축하시겠습니까? ## 1 = yes(예: dbname-20010310-04.sql.gz) ## 0 = no (예: dbname-20010310-04.sql) ## db_compress="1" ## [9] dump시 포함시키지 않을 DB 설정(구분자 : | ) ## not_dump_db="test|test2" ## [10] 시스템 시간 설정 조정 ## #/usr/bin/rdate -s time.kriss.re.kr | clock -w >/dev/null 2>&1 #/usr/bin/rdate -s time.kriss.re.kr >/dev/null 2>&1 /usr/bin/rdate -s time.bora.net >/dev/null 2>&1 ## << 설정 끝 >> ###################################################### ###################################################### ## MySQL DB를 백업하지 않는다면 종료함. ## if [ "$mysql_dbdump" != "1" ] ; then exit 0 fi ## 파일을 구분하기 위해서 날짜-시간으로 설정 ## sysdtime=`date +%Y%m%d-%H` ## MySQL DB dump ## ## MySQL 접속 파라미터 ## mysql_connect="-h $mysql_host -u root -p$mysql_rootpasswd" ## MySQL 모든 DB 축출( $not_dump_db는 제외됨 ) ## mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "(${not_dump_db}|Databases|+)" | awk '{print $2}'` ## DB를 dump 하는 함수 ## mysql_dump_work() { mysql_each_DB="$1" mysql_dump_file="${mysql_backupdir}/${mysql_each_DB}-${sysdtime}.sql" $mysql_dump $mysql_connect $mysql_each_DB > $mysql_dump_file if [ "$db_compress" = "1" ] ; then gzip -f9 $mysql_dump_file fi } if [ "$mysql_DBs" != "" ] ; then if [ ! -d "$mysql_backupdir" ] ; then mkdir -p "$mysql_backupdir" chmod 700 "$mysql_backupdir" fi ## All DB dump to one file(.sql) !!!! ## Verbal advice --> LSN tip board : 'lubzzon' ## --all-databases > all_db.sql ## for mysql_DB in $mysql_DBs ; do mysql_dump_work $mysql_DB done #chmod 600 $mysql_backupdir #chown root mysql_backupdir else ## MySQL이 가동중이지 않을 경우 ## 주) 아래에서 ${IFS}=$IFS HTML에서 <BR>과 같음. ## if [ "$reportmailto" != "" ] ; then mailsubject="dailydump.cron report [${HOSTNAME}]" mailmessages="MySQL이 가동하지 않거나 DB가 없습니다.${IFS}MySQL 서버(${mysql_host}) 확인하세요!!!" echo "$mailmessages" | mail -s "$mailsubject" "$reportmailto" >/dev/null 2>&1 fi fi exit 0

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

  2) /home 주간 full 백업
    /etc/cron.weekly에 저장후 실행권한( chmod 700 home_week.cron )을 준다.
==================================================================================
#!/bin/sh find /backup/weekly/home/ -ctime +15 -exec rm -rf {} ; home_root="/home/" backup_home_root="/backup/weekly/home" sysdtime=`date +%Y%m%d-%H` mkdir -p $backup_home_root/$sysdtime cd $home_root for home_name in $(ls) do if [ -d "$home_root/$home_name" ] ; then tar -pczf "$backup_home_root/$sysdtime/$home_name-$sysdtime.tar.gz" "$home_name" fi done
==================================================================================

  3) /home 일일 증분 백업
    /etc/cron.daily 에 저장후 실행권한( chmod 700 home_day.cron )을 준다.
==================================================================================
#!/bin/sh find /backup/daily/home/ -ctime +8 -exec rm -rf {} ; DATA="/home" BACKUPDIR="/backup/daily/home" TIMEDIR="/backup/daily/last" LAST=`date +%a` cd $DATA if [ $LAST = "Sat" ] ; then NEWER="" NOW=`date +%d-%b` for home_name in $(ls) do if [ -d "$DATA/$home_name" ] ; then echo $NOW > $TIMEDIR/last_date tar $NEWER -zcvpf "$BACKUPDIR/$home_name-$LAST.tar.gz" "$home_name" fi done else NEWER="--newer `cat $TIMEDIR/last_date`" for home_name in $(ls) do if [ -d "$DATA/$home_name" ] ; then tar $NEWER -zcpvf $BACKUPDIR/$home_name-$LAST.tar.gz $home_name fi done fi
==================================================================================

  4) 시스템파일 일일 풀백업
      /etc/cron.daily 에 저장후 실행권한( chmod 700 system_day.cron )을 준다
==================================================================================
#!/bin/sh find /backup/daily/system/ -ctime +15 -exec rm -rf {} ; system_backup_root="/backup/daily/system" sysdtime=`date +%Y%m%d-%H` mkdir -p $system_backup_root/$sysdtime tar -pczf "$system_backup_root/$sysdtime/etc-$sysdtime.tar.gz" "/etc" tar -pczf "$system_backup_root/$sysdtime/var-$sysdtime.tar.gz" "/var" tar -pczf "$system_backup_root/$sysdtime/apache-$sysdtime.tar.gz" "/usr/local/apache"
==================================================================================

7. 후기
백업은 시스템관리에서 가장 중요한 부분입니다.
백업후 반드시 백업 이상 유무를 체크하는 습관을 가지길 바랍니다

댓글목록

등록된 댓글이 없습니다.

1,139 (10/23P)

Search

Copyright © Cmd 명령어 3.14.249.221