六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 808|回复: 0

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

[复制链接]
 楼主| 发表于 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. 通过循环、判断,对数组中的元素重新赋值;
本脚本下载地址:
[url]http://down.chengyongxu.com/Backup_Config_Files_Of_Remote_Servers.sh
[/url]
下载之后请留意版本号和更新日志。
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 '[0-9]{6,6}' | sort -r\`

    126do

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

    128  if [ \$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."

    136  else

    137    echo "Keeping old backup: \$name"

    138  fi

    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@$serverREMOTE_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@$serverREMOTE_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/
    批量备份服务器配置文件和目录

    该会员没有填写今日想说内容.
    您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

    本版积分规则

    快速回复 返回顶部 返回列表