요즘에 회사에서 써먹을려고 다시 짠 백업 스크립트
행여나 이 블로그에 흘러들어와서 그걸 그대로 쓴다면 무궁무진한 오류가 뜨니 주의하시요!
#!/bin/bash#edit by uzoogom 090723## backup configurehost=$(hostname)
day=$(date +%Y-%m-%d)
check=$(mount | grep -c "backup")
# Backup Storage Mounting Checkif [ $check == 1 ]
then
echo "Backup Storage Mounting Check .... OK!!"
else
echo "Backup Storage Mounting Check .... FAIL!!"
echo "Exit backup scripts"
exit 0
fi
# Make a backup Directorymkdir -p /backup/${host}/{webdata,data,config} 2>/dev/null
mkdir /root/backup/reference 2>/dev/null
# 백업 할 디렉토리를 적을 파일 생성touch /root/backup/reference/{webdir,datadir,configfile}
# Lists to Backup 백업 할 디렉토리를 적을 파일 생성WEBDATA=$(grep -v "^#" /root/backup/reference/webdir)
DATA=$(grep -v "^#" /root/backup/reference/datadir)
CONFIG=$(grep -v "^#" /root/backup/reference/configfile)
# TMP DirectoryLIST="/tmp/backuplist_$$.txt"
# Target Backup LocationsWEBDATABACKUP="/backup/${host}/webdata"
DATABACKUP="/backup/${host}/data"
CONFIGBACKUP="/backup/${host}/config"
DATABASEBACKUP="/backup/${host}/database"
#echo "
========================================================================
Starting backup at `date +%Y-%m-%d\ %H:%M:%S`
========================================================================
"
# date to nubmer 증분 백업을 위해서 날자 지정# 1-Mon, 2-Tue, 3-Wed, 4-Thu, 5-Fri, 6-Sat, 7-Sunset $(date '+%u')
# backup Time stamprm -f /backup/${host}/backupTime*.txt
echo Starting at `date +%Y-%m-%d\ %H:%M:%S` > "/backup/${host}/backupTime($day).txt"
if test "$1" = "6" ;
then
# weekly a full backup of all data and config. settings: # echo "Step1. Performing Full Data Backup--------------------------------------"
tar zcf "$DATABACKUP/data_full_$day.tgz" $DATA 2>/dev/null
echo "Removing incremental data backups..."
rm -f $DATABACKUP/data_diff*
echo "Removing four week old full Data backup..."
find $DATABACKUP -depth -type f \( -ctime +20 -o -mtime +20 \) -print > $LIST
rm -f `cat $LIST`
echo "------------------------------------------------------------------Done +"
echo ""
# echo "Step2. Performing Full WebData Backup-----------------------------------"
tar zcf "$WEBDATABACKUP/webdata_full_$day.tgz" --exclude-from=./reference/exclude $WEBDATA 2>/dev/null
echo "Removing incremental data backups..."
rm -f $WEBDATABACKUP/webdata_diff*
echo "Removing four week old full WebData backup..."
find $WEBDATABACKUP -depth -type f \( -ctime +20 -o -mtime +20 \) -print > $LIST
rm -f `cat $LIST`
echo "------------------------------------------------------------------Done +"
echo ""
# echo ""
echo "Step3. Performing Full Config Backup------------------------------------"
tar zcf "$CONFIGBACKUP/config_full_$day.tgz" $CONFIG 2>/dev/null
echo "Removing incremental config backups..."
rm -f $CONFIGBACKUP/config_diff*
echo "Removing four week old full config backup..."
find $CONFIGBACKUP -depth -type f \( -ctime +20 -o -mtime +20 \) -print > $LIST
rm -f `cat $LIST`
echo "------------------------------------------------------------------Done +"
else
# incremental data backup: # echo "Step1. Performing Incremental Data Backup-------------------------------"
find $DATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
tar zcfT "$DATABACKUP/data_diff_$day.tgz" "$LIST" 2>/dev/null
rm -f "$LIST"
echo "------------------------------------------------------------------Done +"
echo ""
# incremental webdata backup: # echo "Step2. Performing Incremental WebData Backup----------------------------"
find $WEBDATA -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
tar zcfT "$WEBDATABACKUP/webdata_diff_$day.tgz" --exclude-from=./reference/exclude "$LIST" 2>/dev/null
rm -f "$LIST"
echo "------------------------------------------------------------------Done +"
echo ""
# incremental config backup: # echo "Step3. Performing Incremental Config Backup-----------------------------"
find $CONFIG -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $LIST
tar zcfT "$CONFIGBACKUP/config_diff_$day.tgz" "$LIST" 2>/dev/null
rm -f "$LIST"
echo "------------------------------------------------------------------Done +"
fi
# MySql 용 백업 설정이나, MySql을 마땅히 백업할 서버가 없어서 주석처리# Database Backup# #mkdir -p /backup/${host}/database 2>/dev/null#DB_DIR="/usr/local/mysql/data"## Create SQL dump of databases and compress:#echo "#Archiving Databases...#"# Find current databases# DB=( $(find ${DB_DIR}/ -maxdepth 1 -type d ! -name ".*" | sort | sed -e 's/\/usr\/local\/mysql\/data\///g') )# Set for loop max counter based on number of databases# j=${#DB[@]}# for (( i=0; i<j; i++ )); do# mysqldump -u user --password=passwd --opt ${DB[i]} | gzip >"$DATABASEBACKUP/${DB[i]}_$day.sql.gz"# done##echo "#Removing two week old database backups...#"#find $DATABASEBACKUP -depth -type f \( -ctime +13 -o -mtime +13 \) -print > $LIST#rm -f `cat $LIST`#rm -f "$LIST"## backup Time stampecho Finished at `date +%Y-%m-%d\ %H:%M:%S` >> "/backup/${host}/backupTime($day).txt"
echo "
========================================================================
Finished: `date +%Y-%m-%d\ %H:%M:%S`
========================================================================
"
exit 0
0