#!/bin/sh
##
## This file name is "dailydump.cron".
## for /etc/cron.daily/dailydump.cron
##
## [crond 데몬을 이용한 자료 백업-매일]
##
## 작성자 김칠봉<san2(at)linuxchannel.net>
## 작성일 : 2001.03.10
## 수정일 : 2001.03.14
## : 2003.01.08 add mysqldump options
##
######################################################
##
## [사용법]
##
## cp dailydump.cron /etc/cron.daily/
## chmod 700 /etc/cron.daily/dailydump.cron
##
## 설정후, 설정파일의 문법이 맞나 확인하는 방법(디버깅)
##
## # sh -xv dailydump.cron
##
######################################################
##
## [백업하는 자료]
##
## 0. 날짜별로 백업(예: filename-20010310-04.xxx)
## 1. 시스템 날짜 수정(rdate)
## 2. mysql 모든 DB를 .sql 이나 .sql.gz 형태로 백업
## 3. 기타(아직 없음)
##
## * 나머지 설정 파일은 일주일에 한번이나 두번 정도로
## 백업하는 것이 적당.
##
######################################################
##
## [관리자가 꼭 설정해야할 내용 - 11가지]
##

## [0] MySQL DB를 백업할까요?
## 1 = yes(DB를 백업합니다.)
## 0 = no (DB를 백업하지 않습니다.) *** 이하 설정할 필요없음 ***
mysql_dbdump='1'

## [1] MySQL이 어떠한 이유 등으로 가동중이지 않을 경우에 메일을
## 받을 볼 user나 메일 주소 설정.
##
## localhost user인 경우 : san2 또는 san2(at)localhost
## localhost user가 아닌 경우 : san2(at)linuxchannel.net
##
## 만약 메일을 받아 보기를 원치 않는다면 다음 설정을 주석(#)
## 으로 처리하거나 공백으로 설정
##
reportmailto='san2'

## [2] 기본 백업 디렉토리 설정(수동으로 디렉토리 만들 필요없음)
##
backupdir='/var/backup'

## [3] MySQL DB 서버(클라이언트가 아님)
## localhost인 경우 localhost로 설정하세요.
##
mysql_host='localhost'

## [4] MySQL DB root 암호(시스템 root 암호 아님)
##
## ** 보안 **
## ** 이 파일의 퍼미션에 주의 **
## ** 만약 /root/.my.cnf 파일의 root 암호를 기본적으로 사용하고자
## ** 한다면,
## **
## ** mysql_rootpasswd='/root/.my.cnf'
## **
## ** 으로 설정하기 바랍니다.
## ** ex) /root/.my.cnf
## ** [client]
## ** password = xxxxxx
##
mysql_rootpasswd='/root/.my.cnf'
#mysql_rootpasswd='xxxxxx'

## [5] MySQL DB dump 디렉토리(뒤 부분, 수동으로 디렉토리 만들 필요없음)
##
mysql_backupdir="$/mysqldump"

## [6] MySQL DB dump 프로그램
## RPM으로 설치했다면 `which mysqldump`의 결과 명시
##
mysql_dump='/usr/local/mysql/bin/mysqldump'

## [7] MySQL mysqldump arguments
##
mysql_dump_args='--add-drop-table --quick --extended-insert'
#mysql_dump_args='--opt'

## [8] MySQL DB show 프로그램
## RPM으로 설치했다면 'which mysqlshow'의 결과 명시
##
mysql_show='/usr/local/mysql/bin/mysqlshow'

## [9] dump한 DB를 압축하시겠습니까?
## 1 = yes(예: dbname-20010310-04.sql.gz)
## 0 = no (예: dbname-20010310-04.sql)
##
db_compress='1'

## [10] 전체 DB 중 포함시키지 않을 DB 설정
## 각 DB의 구분은 "또는 연산자(|)"로 다음과 같이 구분
## 기본 값으로는 test와 test2로 설정되어 있음.
##
not_dump_db='test|test2'

##
## 설정 내용 끝(이하 수정할 필요 없음)
##
######################################################
######################################################
##
## 시스템 시간 설정 조정
##
#/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

## 실제로 DB를 dump 하는 함수
##
mysql_dump_work()
{
mysql_each_DB="$1"
mysql_dump_file="$/$-$.sql"
$mysql_dump $mysql_connect $mysql_dump_args $mysql_each_DB > $mysql_dump_file
if [ "$db_compress" = "1" ] ; then
gzip -f9 $mysql_dump_file
fi
}

## MySQL DB를 백업하지 않는다면 종료함.
##
[ "$mysql_dbdump" != "1" ] && exit 0

## 파일을 구분하기 위해서 날짜-시간으로 설정
##
sysdtime=`date +%Y%m%d-%H`

## MySQL DB dump
##
## MySQL 접속 파라미터
##
if [ -s "$mysql_rootpasswd" ] ; then
passwd_opt="--defaults-file=$mysql_rootpasswd"
else
passwd_opt="--password=$mysql_rootpasswd"
fi
mysql_connect="$passwd_opt -h $mysql_host -u root"

## MySQL 모든 DB 축출
## 앞에서 설정한 $not_dump_db는 제외됨
##
mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "($|Databases|+)" | awk '{print $2}'`

if [ X"$mysql_DBs" != "X" ] ; 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 $/*
#chown root mysql_backupdir

else
## MySQL이 가동중이지 않을 경우
## 주) 아래에서 $=$IFS HTML에서 <BR>과 같음.
##

if [ X"$reportmailto" != "X" ] ; then
mailsubject="dailydump.cron report [$]"
mailmessages="MySQL이 가동하지 않거나 DB가 없습니다.$MySQL 서버($) 확인하세요!!!"
echo "$mailmessages" | mail -s "$mailsubject" "$reportmailto" >/dev/null 2>&1
fi
fi

exit 0
Posted by [czar]
,