安哥网络 发表于 2015-8-24 15:22:28

批量备份服务器配置文件和目录

批量备份服务器配置文件和目录
功能:
1. 只在备份机执行,远程的服务器只需要允许备份机用root通过密钥登录;
2. 在备份机上配置需要备份哪些服务器,在NEED_BACKUP_SERVERS这个数组增减;
3. 在备份机上配置需要备份服务器上哪些文件,在NEED_BACKUP_DETAIL这个数组增减,如果需要备份某台服务器上NEED_BACKUP_DETAIL数组里定义的某个文件就备份,不存在的文件则自动跳过,例如Web服务器上没my.cnf , 也没有影响;
4. 如果服务器上产生的新备份和已经存在已往备份内容一样则只保留时间较早的备份。因为服务器的配置文件不是经常改动的;
5. 通过修改定义KEEP_BACKUP_NUM为个变量,可以决定远程服务器上保留最近多少份备份,我这里定义的是10份。备份机上保留所有远程服务器的备份。因为配置文件都比较小,不用担心磁盘空间占用问题。
用过下列技术:
1. 获取远程服务器IP,如果某台服务器没有公网IP则使用该服务器的“主机名_IP.备份年月日_备份时间.tar.gz
2. 通过循环、判断,对数组中的元素重新赋值;
本脚本下载地址:
http://down.chengyongxu.com/Backup_Config_Files_Of_Remote_Servers.sh
下载之后请留意版本号和更新日志。

001#!/bin/bash


002##################################################################


003# Backup_Config_Files_Of_Remote_Servers


004# Env: Centos 5.5 x86_64


005# Created by Hernan on 2011-04-06


006# Copyright 2010 __Chengyongxu.com__. All rights reserved.


007#


008# Version: 1.4.6


009# Revision History


010##################################################################


011


012# Local Tmp Dir Of This Script


013THIS_SCRIPT_TMP=/tmp/Do_at_remote_server.sh


014THIS_SCRIPT_TMP_NAME=`echo $THIS_SCRIPT_TMP|awk -F/ '{print $NF}'`


015# Local Backup Dir


016LOCAL_BACKUP_DIR=/tmp/IDC_config_backup


017


018# Need Backup Servers And Files List


019REMOTE_SERVER_TMP_DIR=/tmp/Backup_server_config_files_tmp


020NEED_BACKUP_SERVERS=(\


02110.0.0.52


022server_a_ip \


023server_b_ip \


024server_c_ip \


025server_d_ip \


026chengyongxu.com \


027)


028NEED_BACKUP_DETAIL=(\


029/etc/hosts \


030/etc/httpd/conf/*.conf \


031/etc/httpd/conf.d/*.conf \


032/etc/keepalived/keepalived.conf


033/etc/my.cnf \


034/etc/postfix \


035/root/bin/*sh \


036/usr/local/nagios/etc/nagios.cfg \


037/usr/local/nagios/etc/objects/*cfg \


038/usr/local/nginx/conf \


039/usr/local/php/etc/php.ini \


040/usr/local/php/etc/php-fpm.conf \


041/usr/local/php-fcgi/etc/php.ini \


042/usr/local/php-fcgi/etc/php-fpm.conf \


043/usr/local/sphinx/etc/*.conf \


044/var/spool/cron \


045)


046KEEP_BACKUP_NUM=10


047


048SSH_PORT=22


049SSH_USER=root


050


051##################################################################


052#


053# Global Functions


054#


055##################################################################


056


057#========= !!!! Warning ! Don't edit next function !!!! =========#


058# Create Script Tmp File


059Create_Script (){


060cat << EOF > $THIS_SCRIPT_TMP


061#!/bin/bash


062


063NEED_BACKUP_DETAIL=(${NEED_BACKUP_DETAIL[*]})


064


065# How many nums the backup needed


066BAKNUM=$KEEP_BACKUP_NUM


067


068REMOTE_SERVER_TMP_DIR=$REMOTE_SERVER_TMP_DIR


069SERVER_IP=\`/sbin/ifconfig|grep "inet addr"|cut -f 2 -d ":"|cut -f 1 -d " "|grep -vE "^10.|^127|^172.16|^192.168"\`


070BACKUP_TIME=\`date +%Y%m%d_%H%M\`


071


072##################################################################


073#


074# Compress NEED_BACKUP_DETAIL


075#


076##################################################################


077# If IPv4 private address only, use hostname.ip


078if [ -z \$SERVER_IP ]


079then


080    SERVER_IP=\`hostname\`_\`/sbin/ifconfig|grep "inet addr"|cut -f 2 -d ":"|cut -f 1 -d " "|grep -vE "^127"|head -n 1\`


081fi


082


083# Create Tpm dir


084if [ ! -d \$REMOTE_SERVER_TMP_DIR ]


085then


086    mkdir -p \$REMOTE_SERVER_TMP_DIR


087fi


088


089# Compress


090for file in \${NEED_BACKUP_DETAIL[*]}


091do


092    # When you want to backup the file exists,


093    #   assign to an element of the new array


094    while [ -e \$file ]


095    do


096      NEED_BACKUP_DETAIL_EXISTS[\$num]=\$file


097      let num++


098    break


099    done


100done


101tar zcfpP \$REMOTE_SERVER_TMP_DIR/\$SERVER_IP.\$BACKUP_TIME.tar.gz \${NEED_BACKUP_DETAIL_EXISTS[*]}


102


103##################################################################


104#


105# If files are the same,keep one only


106#


107##################################################################


108NEW_BACKUP_ARCHIVE_CONTENT=\`tar tvf \$REMOTE_SERVER_TMP_DIR/\$SERVER_IP.\$BACKUP_TIME.tar.gz\`


109for backfile in \`ls \$REMOTE_SERVER_TMP_DIR | grep tar.gz |grep -v \$SERVER_IP.\$BACKUP_TIME\`


110do


111    OLD_BACKUP_ARCHIVE_CONTENT=\`tar tvf \$REMOTE_SERVER_TMP_DIR/\$backfile\`


112    while [ "\$NEW_BACKUP_ARCHIVE_CONTENT" = "\$OLD_BACKUP_ARCHIVE_CONTENT" ]


113    do


114      rm -rvf \$REMOTE_SERVER_TMP_DIR/\$SERVER_IP.\$BACKUP_TIME.tar.gz 1 >> \$REMOTE_SERVER_TMP_DIR/delete_new.log


115    break


116    done


117done


118


119##################################################################


120#


121# Keep Some Backup Files Newest


122#


123##################################################################


124count=0


125for name in \`ls \$BAKPATH/ |grep -E '{6,6}' | sort -r\`


126do


127count=\$((count+1))


128if [ \$count -gt \$BAKNUM ] ; then


129    echo -n "Cleaning old backup: \$name... "


130      if [ "\$BAKPATH/\$name" = "/" ] ; then


131      echo "No rm -rf /!"


132      exit 1


133      fi


134      rm -rf \$BAKPATH/\$name


135    echo " Done."


136else


137    echo "Keeping old backup: \$name"


138fi


139done


140exit


141EOF


142}


143


144Copy_Script_To_Remote (){


145for server in ${NEED_BACKUP_SERVERS[*]}


146do


147ssh -p $SSH_PORT -tt $SSH_USER@$server << EOT


148mkdir -p $REMOTE_SERVER_TMP_DIR


149exit


150EOT


151scp -P $SSH_PORT $THIS_SCRIPT_TMP $SSH_USER@$server:$REMOTE_SERVER_TMP_DIR/


152done


153}


154


155Backup_On_Remote_Then_Copy_Back (){


156for server in ${NEED_BACKUP_SERVERS[*]}


157do


158ssh -p $SSH_PORT -tt $SSH_USER@$server << EOP


159chmod o+x $REMOTE_SERVER_TMP_DIR/$THIS_SCRIPT_TMP_NAME


160sh $REMOTE_SERVER_TMP_DIR/$THIS_SCRIPT_TMP_NAME


161rm -f $REMOTE_SERVER_TMP_DIR/$THIS_SCRIPT_TMP_NAME


162exit


163EOP


164rsync -e "ssh -p $SSH_PORT" $SSH_USER@$server:$REMOTE_SERVER_TMP_DIR/*tar.gz $LOCAL_BACKUP_DIR/


165done


166}


167


168##################################################################


169#


170# Main


171#


172##################################################################


173#


174Create_Script


175Copy_Script_To_Remote


176Backup_On_Remote_Then_Copy_Back


177rm -rf $THIS_SCRIPT_TMP
http://www.chengyongxu.com/blog/%E6%89%B9%E9%87%8F%E5%A4%87%E4%BB%BD%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95/
批量备份服务器配置文件和目录

页: [1]
查看完整版本: 批量备份服务器配置文件和目录