SAMBA 마운트 디스크로 백업
[root@chonnom root]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext3 71G 6.0G 61G 9% / tmpfs tmpfs 947M 0 947M 0% /dev/shm //KB2.SMILESERV.COM/KB212308 cifs 100G 1.5G 99G 2% /SMILESERV_100G_BACKUP |
backup_info (백업할 데이타정보)
#!/bin/bash
today=`date +%Y-%m%d`; sysdtime=`date +%Y-%m%d-%H%M`; Mount_DIR=/SMILESERV_100G_BACKUP
# Rsync Clon Backup rsync_src=/home
rsync_dst=$Mount_DIR/rsync
# MYSQL Backup mysql_rootpasswd="root"; mysql_host="localhost" mysql_backup_period=5; reportmailto="";
mysql_data_src=/usr/local/mysql/var; mysql_dst="$Mount_DIR/tar/mysql";
mysql_dump="/usr/local/mysql/bin/mysqldump"; mysql_show="/usr/local/mysql/bin/mysqlshow";
# Directory Backup home_backup_period=30 full_backup_week="Sun|일" home_src="/home" home_dst="$Mount_DIR/tar/home" home_dst_full="$Mount_DIR/tar/home/full"; home_dst_difference="$Mount_DIR/tar/home/difference";
|
config (SAMBA 마운트된곳의 접속정보)
#!/bin/bash username="mojily"; password="********"; backup_serverip="KB2.SMILESERV.COM"; |
home_tar.sh (홈백업 : 1주일에 1번 전체백업, 나머지 차등백업)
#!/bin/sh
source $(dirname $0)/config source $(dirname $0)/backup_info
if [ ! -d $Mount_DIR ]; then mkdir -p $Mount_DIR; fi
if [ ! -d "$home_dst_full" ]; then mkdir -p $home_dst_full; fi;
if [ ! -d "$home_dst_difference/$today" ]; then mkdir -p $home_dst_difference/$today; fi;
# 지난 데이타 삭제 find $home_dst_full -ctime +$home_backup_period \-exec rm -rf {} \; find $home_dst_difference -ctime +$home_backup_period \-exec rm -rf {} \;
# 백업시작 cd $home_src;
for home_name in $(ls); do if [ $home_name = "lost+found" ]; then continue; fi;
if [ $home_name = "$(echo $Mount_DIR |cut -d"/" -f3)" ]; then continue; fi;
if [ -d "$home_src/$home_name" ] ; then full_backup_date=`echo $(date +%a) |egrep $full_backup_week` if [ ! -z $full_backup_date ]; then tar -pczf "$home_dst_full/$home_name-$sysdtime.tar.gz" "$home_name"; else tar -N "`cat $home_dst/last`" -pczf "$home_dst_difference/$today/$home_name-$sysdtime.tar.gz" "$home_name"; fi;
fi; done; date +"%Y-%m-%d %T" > $home_dst/last; |
mysql_backup.sh (dump 백업 및 tar 압축백업)
#!/bin/bash
source $(dirname $0)/config source $(dirname $0)/backup_info
if [ ! -d "$mysql_dst" ]; then mkdir -p $mysql_dst; fi;
mysql_backupdir="${mysql_dst}/$today"; find $mysql_dst -ctime +$mysql_backup_period \-exec rm -rf {} \;
db_compress="0" not_dump_db="test|test2" mysql_connect="-h $mysql_host -u root -p$mysql_rootpasswd"; mysql_DBs=`$mysql_show $mysql_connect 2>/dev/null | egrep -v "(${not_dump_db}|Databases|\+)" | awk '{print $2}'` 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 for mysql_DB in $mysql_DBs ; do mysql_dump_work $mysql_DB done
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
# 압축 백업 tar jcvfp "$mysql_backupdir/All_Database_${sysdtime}.tar.bz2" "$mysql_data_src"; |
rsync_backup.sh (동기화 백업)
#!/bin/bash source $(dirname $0)/config source $(dirname $0)/backup_info
if [ ! -d $rsync_dst ] ; then mkdir -p $rsync_dst; fi
rsync -tripD --exclude-from=$(dirname $0)/exclude_list --delete $rsync_src $rsync_dst |
※ exclude_list (동기화할 폴더에서 제외할 패턴)