Local Backup 지침 < 로컬백업지침 ver 1.0> 아래의로컬백업지침은원격백업지침의기초가됩니다. 1. 준비사항 1) 운영중인하드디스크와는별도로백업하려는 Data 용량의최소 4 배이상되는하드디스크를준비한다. 2) 백업하드디스크의용량이남을지라도백업용도외에는사용하지않는다. 3) 백업하려는데이타항목을선정하여, 백업디렉토리를트리구조화한다. 2. 백업방법 1) 변경이적은데이타 ( 홈페이지파일 ) : 일주일에한번데이타풀백업과일일증분백업 2) 변경이잦은데이타 (DB 파일 ) : 일일풀백업또는 1 시간간격으로백업을실행한다. 3) 시스템설정파일 (/etc, /var 등 ) : 일일풀백업 3. 백업후점검사항 1) 최소 1 주에한번은 full backup le 을개인 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) 을준다. ========================================================== nd /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 파일을구분하기위해서날짜 - 시간으로설정 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_le="${mysql_backupdir}/${mysql_each_db}-${sysdtime}.sql" $mysql_dump $mysql_connect $mysql_each_db > $mysql_dump_le if [ "$db_compress" = "1" ] ; then gzip -f9 $mysql_dump_le } if [ "$mysql_dbs"!= "" ] ; then if [! -d "$mysql_backupdir" ] ; then mkdir -p "$mysql_backupdir" chmod 700 "$mysql_backupdir"
All DB dump to one le(.sql)!!!! Verbal advice --> LSN tip board : 'lubzzon' --all-databases > all_db.sql for mysql_db in $mysql_dbs ; do mysql_dump_work $mysql_db #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 exit 0 2) /home 주간 full 백업 /etc/cron.weekly 에저장후실행권한 ( chmod 700 home_week.cron ) 을준다. nd /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" 3) /home 일일증분백업 /etc/cron.daily 에저장후실행권한 ( chmod 700 home_day.cron ) 을준다. nd /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" 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
4) 시스템파일일일풀백업 /etc/cron.daily 에저장후실행권한 ( chmod 700 system_day.cron ) 을준다 nd /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. 후기 백업은시스템관리에서가장중요한부분입니다. 백업후반드시백업이상유무를체크하는습관을가지길바랍니다.