• linux批量备份服务器配置文件和目录的脚本


    这篇文章主要介绍了linux下批量备份服务器配置文件和目录的方法,需要的朋友可以参考下

    功能:
    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. 通过循环、判断,对数组中的元素重新赋值;

    下载之后请留意版本号和更新日志。

    #!/bin/bash

    ##################################################################
    # Backup_Config_Files_Of_Remote_Servers
    # Env: Centos 5.5 x86_64
    # Created by Hernan on 2011-04-06
    # Copyright 2010 __Chengyongxu.com__. All rights reserved.
    #
    # Version: 1.4.6
    # Revision History
    # by www.jbxue.com
    ##################################################################

    # Local Tmp Dir Of This Script
    THIS_SCRIPT_TMP=/tmp/Do_at_remote_server.sh
    THIS_SCRIPT_TMP_NAME=`echo $THIS_SCRIPT_TMP|awk -F/ '{print $NF}'`
    # Local Backup Dir
    LOCAL_BACKUP_DIR=/tmp/IDC_config_backup

    # Need Backup Servers And Files List
    REMOTE_SERVER_TMP_DIR=/tmp/Backup_server_config_files_tmp
    NEED_BACKUP_SERVERS=(
    10.0.0.52
    server_a_ip
    server_b_ip
    server_c_ip
    server_d_ip
    chengyongxu.com
    )
    NEED_BACKUP_DETAIL=(
    /etc/hosts
    /etc/httpd/conf/*.conf
    /etc/httpd/conf.d/*.conf
    /etc/keepalived/keepalived.conf
    /etc/my.cnf
    /etc/postfix
    /root/bin/*sh
    /usr/local/nagios/etc/nagios.cfg
    /usr/local/nagios/etc/objects/*cfg
    /usr/local/nginx/conf
    /usr/local/php/etc/php.ini
    /usr/local/php/etc/php-fpm.conf
    /usr/local/php-fcgi/etc/php.ini
    /usr/local/php-fcgi/etc/php-fpm.conf
    /usr/local/sphinx/etc/*.conf
    /var/spool/cron
    )
    KEEP_BACKUP_NUM=10

    SSH_PORT=22
    SSH_USER=root

    ##################################################################
    #
    # Global Functions
    #
    ##################################################################

    #========= !!!! Warning ! Don't edit next function !!!! =========#
    # Create Script Tmp File
    Create_Script (){
    cat << EOF > $THIS_SCRIPT_TMP
    #!/bin/bash

    NEED_BACKUP_DETAIL=(${NEED_BACKUP_DETAIL[*]})

    # How many nums the backup needed
    BAKNUM=$KEEP_BACKUP_NUM

    REMOTE_SERVER_TMP_DIR=$REMOTE_SERVER_TMP_DIR
    SERVER_IP=\`/sbin/ifconfig|grep "inet addr"|cut -f 2 -d ":"|cut -f 1 -d " "|grep -vE "^10.|^127|^172.16|^192.168"\`
    BACKUP_TIME=\`date +%Y%m%d_%H%M\`

    ##################################################################
    #
    # Compress NEED_BACKUP_DETAIL
    #
    ##################################################################
    # If IPv4 private address only, use hostname.ip
    if [ -z $SERVER_IP ]
    then
    SERVER_IP=\`hostname\`_\`/sbin/ifconfig|grep "inet addr"|cut -f 2 -d ":"|cut -f 1 -d " "|grep -vE "^127"|head -n 1\`
    fi

    # Create Tpm dir
    if [ ! -d $REMOTE_SERVER_TMP_DIR ]
    then
    mkdir -p $REMOTE_SERVER_TMP_DIR
    fi

    # Compress
    for file in ${NEED_BACKUP_DETAIL[*]}
    do
    # When you want to backup the file exists,
    # assign to an element of the new array
    while [ -e $file ]
    do
    NEED_BACKUP_DETAIL_EXISTS[$num]=$file
    let num++
    break
    done
    done
    tar zcfpP $REMOTE_SERVER_TMP_DIR/$SERVER_IP.$BACKUP_TIME.tar.gz ${NEED_BACKUP_DETAIL_EXISTS[*]}

    ##################################################################
    #
    # If files are the same,keep one only
    #
    ##################################################################
    NEW_BACKUP_ARCHIVE_CONTENT=\`tar tvf $REMOTE_SERVER_TMP_DIR/$SERVER_IP.$BACKUP_TIME.tar.gz\`
    for backfile in \`ls $REMOTE_SERVER_TMP_DIR | grep tar.gz |grep -v $SERVER_IP.$BACKUP_TIME\`
    do
    OLD_BACKUP_ARCHIVE_CONTENT=\`tar tvf $REMOTE_SERVER_TMP_DIR/$backfile\`
    while [ "$NEW_BACKUP_ARCHIVE_CONTENT" = "$OLD_BACKUP_ARCHIVE_CONTENT" ]
    do
    rm -rvf $REMOTE_SERVER_TMP_DIR/$SERVER_IP.$BACKUP_TIME.tar.gz 1 >> $REMOTE_SERVER_TMP_DIR/delete_new.log
    break
    done
    done

    ##################################################################
    #
    # Keep Some Backup Files Newest
    #
    ##################################################################
    count=0
    for name in \`ls $BAKPATH/ |grep -E '[0-9]{6,6}' | sort -r\`
    do
    count=$((count+1))
    if [ $count -gt $BAKNUM ] ; then
    echo -n "Cleaning old backup: $name... "
    if [ "$BAKPATH/$name" = "/" ] ; then
    echo "No rm -rf /!"
    exit 1
    fi
    rm -rf $BAKPATH/$name
    echo " Done."
    else
    echo "Keeping old backup: $name"
    fi
    done
    exit
    EOF
    }

    Copy_Script_To_Remote (){
    for server in ${NEED_BACKUP_SERVERS[*]}
    do
    ssh -p $SSH_PORT -tt $SSH_USER@$server << EOT
    mkdir -p $REMOTE_SERVER_TMP_DIR
    exit
    EOT
    scp -P $SSH_PORT $THIS_SCRIPT_TMP $SSH_USER@$server:$REMOTE_SERVER_TMP_DIR/
    done
    }

    Backup_On_Remote_Then_Copy_Back (){
    for server in ${NEED_BACKUP_SERVERS[*]}
    do
    ssh -p $SSH_PORT -tt $SSH_USER@$server << EOP
    chmod o+x $REMOTE_SERVER_TMP_DIR/$THIS_SCRIPT_TMP_NAME
    sh $REMOTE_SERVER_TMP_DIR/$THIS_SCRIPT_TMP_NAME
    rm -f $REMOTE_SERVER_TMP_DIR/$THIS_SCRIPT_TMP_NAME
    exit
    EOP
    rsync -e "ssh -p $SSH_PORT" $SSH_USER@$server:$REMOTE_SERVER_TMP_DIR/*tar.gz $LOCAL_BACKUP_DIR/
    done
    }

    ##################################################################
    #
    # Main
    #
    ##################################################################
    #
    Create_Script
    Copy_Script_To_Remote
    Backup_On_Remote_Then_Copy_Back
    rm -rf $THIS_SCRIPT_TMP

  • 相关阅读:
    SSM集成Mybatis和Druid
    SpringMVC集成Thymeleaf
    最简单的SpringMVC + Maven配置
    信息化平台架构设计
    TaskSchedule-任务调度系统设计
    Redis的类库封装设计
    [oracle] DBLINK +同义词,实现本地数据库访问另一台机器的数据库
    [Tomcat 部署问题] Undeployment Failure could not be redeployed ...
    [oracle原]访问局域网内出现“ORA-12541:TNS:无监听程序”
    [java插件]myeclipse添加插件
  • 原文地址:https://www.cnblogs.com/cfinder010/p/3234053.html
Copyright © 2020-2023  润新知