로컬호스트

로컬호스트

QA

로컬호스트

본문

로컬호스트 자동으로 디비 데이타 백업해주는 프로그램이 혹시 있나염

이 질문에 댓글 쓰기 :

답변 1

아래 내용을 발취해서 backup.sh 로 만들어 서버에 /backup 폴더를 만든후 

 /etc/cron.daily 폴더내에 업로드 시킨후 퍼미션을 700으로 변경 하시면 자동으로 백업이 됩니다.

 


#!/bin/bash
#####################################################################################
#                                                                                   #
# * Backup Script v.1.0.2                                                           #
# * Created Date    : 2019/1/15                                                     #
# * Created by  : Joo Sung ( *** 개인정보보호를 위한 이메일주소 노출방지 *** )                             #
#                                                                                   #
#####################################################################################
# 로컬 풀 백업 설정
BACKUP_DIR=/backup          # 백업 보관 디렉토리
BACKUP_EXPIRES_DAYS=3       # 백업 만료 기간.   기본값 3일이 지난 백업 자동 삭제.
BACKUP_PREFIX='APM'         # 백업 파일명 앞에 덧붙일 이름(서버명, 사이트명 등...)
DB_USER='root'              # MySQL 사용자.  모든 디비를 백업하려면 root 계정 필요(기본값)
DB_PASS='패스워드'            # MySQL 비밀번호.
DB_HOST='localhost'         # MySQL 서버 주소.  별도 서버에 분리되지 않았다면 로컬 서버는 localhost 입력.
DB_BIN='/usr/bin'           # mysql, mysqldump 실행 파일의 경로.  기본 /usr/bin , 컴파일시 /usr/local/mysql/bin 등
# 메세지/로그 - 에러
function error
{
  echo "error: $1"
  logger "backup error: $1"
}
# 메세지/로그 - 정보
function info
{
  # Cron 데몬에서 실행되므로, 정보는 화면에 출력하지 않음.
  logger "backup info: $1"
}
# mysql, mysqldump 경로 확인
if [ ! -f $DB_BIN/mysql ]; then
  error "[ $DB_BIN/mysql ] 파일이 존재하지 않습니다."
  exit 1
fi
if [ ! -f $DB_BIN/mysqldump ]; then
  error "[ $DB_BIN/mysqldump ] 파일이 존재하지 않습니다."
  exit 1
fi
# 백업 디렉토리가 존재할 경우에만 백업 시작
if [ ! -d $BACKUP_DIR ]; then
  error "[ $BACKUP_DIR ] 백업 보관 디렉토리가 존재하지 않습니다."
  exit 1
fi

# 백업 시작
BD=`date +%Y%m%d"_"%H%M%S`
info "$0 - started"

# 백업 보관 기간이 지난 백업본 삭제
#  - 수정 주의: find 명령에 -delete 옵션이 추가되어, 실제 오래된 파일이 삭제됩니다.
#  -           불가피하게 수정해야 한다면 꼭 별도 테스트를 거치셔야 합니다.
cd $BACKUP_DIR
DELETED=`find $BACKUP_DIR -maxdepth 1 -mtime +$BACKUP_EXPIRES_DAYS -type f \
-name $BACKUP_PREFIX".*.Backup.*.sql.gz" -delete -print0`
if [ "$DELETED" != "" ]; then
  info "Deleting expired backups - $DELETED"
fi
DELETED=`find $BACKUP_DIR -maxdepth 1 -mtime +$BACKUP_EXPIRES_DAYS -type f \
-name $BACKUP_PREFIX".*.Backup.*.tgz" -delete -print0`
if [ "$DELETED" != "" ]; then
  info "Deleting expired backups - $DELETED"
fi
# MySQL 백업
DB_LIST=$($DB_BIN/mysql -u $DB_USER --password=$DB_PASS -h $DB_HOST -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)")
if [ "$?" != "0" ]; then
  error "mysql 접속이 실패하였습니다."
  error "[command] $DB_BIN/mysql -u $DB_USER --password=**** -h $DB_HOST -e \"SHOW DATABASES;\""
  #exit 1 # 디비 접속 장애시에도, /home 등 나머지는 백업 진행되어야 함.
fi
for db in $DB_LIST
do
  $DB_BIN/mysqldump -u $DB_USER --password=$DB_PASS -h $DB_HOST \
  --default-character-set=utf8 --opt --skip-lock-tables --single-transaction -Q -B $db \
  | gzip > $BACKUP_PREFIX.$db.Backup.$BD.sql.gz
  if [ "$?" != "0" ]; then
    error "[ $db ] mysqldump 작업이 실패하였습니다."
  fi
done
# /home 디렉토리 백업.
HOME_LIST=$(find /home/ -mindepth 1 -maxdepth 1 -type d -printf '%f\n'| grep -Ev "(lost\+found)")
for _home in $HOME_LIST
do
  tar zcf $BACKUP_PREFIX.$_home.Backup.$BD.tgz /home/$_home \
  2>&1 | grep -v "tar: Removing leading"
done
# /etc/ 디렉토리 백업.
tar zcf $BACKUP_PREFIX.CONFIG.ETC.Backup.$BD.tgz /etc/ \
2>&1 | grep -v "tar: Removing leading"
# /var/named/ 디렉토리 존재시에만 백업
if [ -d /var/named/ ]; then
  tar zcf $BACKUP_PREFIX.CONFIG.NAMED.Backup.$BD.tgz /var/named/ \
  2>&1 | grep -v "tar: Removing leading"
fi
# 사용자 정의 백업 - 다른 디렉토리는 다음 샘플처럼 디렉토리명을 지정해서 백업을 추가하시면 됩니다.
#tar zcf $BACKUP_PREFIX.CONFIG.usr-local.Backup.$BD.tgz /usr/local/ \
#2>&1 | grep -v "tar: Removing leading"
#tar zcf $BACKUP_PREFIX.CONFIG.php-modules.Backup.$BD.tgz /usr/lib64/php/modules/ \
#2>&1 | grep -v "tar: Removing leading"
#
#
# 백업 완료 - 크론 데몬에서 실행되므로, 완료시 별도 메세지 출력안함.
info "$0 - completed successfully"

 

서버 사용이 어렵다면 아래 링크의 프로그램을 이용하시면 서버 관리가 아주 쉬울겁니다.

https://apachezone.com/apm/50

 

위의 스크립트는 링크에서 제공되는 파일에 첨부되어 있는것 입니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,475 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT