技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

linux批量備份服務(wù)器配置文件和目錄的腳本

來源:技術(shù)員聯(lián)盟┆發(fā)布時(shí)間:2018-12-16 12:03┆點(diǎn)擊:

這篇文章主要介紹了linux下批量備份服務(wù)器配置文件和目錄的方法,需要的朋友可以參考下

 

功能:
1. 只在備份機(jī)執(zhí)行,遠(yuǎn)程的服務(wù)器只需要允許備份機(jī)用root通過密鑰登錄;
2. 在備份機(jī)上配置需要備份哪些服務(wù)器,在NEED_BACKUP_SERVERS這個(gè)數(shù)組增減;
3. 在備份機(jī)上配置需要備份服務(wù)器上哪些文件,在NEED_BACKUP_DETAIL這個(gè)數(shù)組增減,如果需要備份某臺(tái)服務(wù)器上 NEED_BACKUP_DETAIL數(shù)組里定義的某個(gè)文件就備份,不存在的文件則自動(dòng)跳過,例如Web服務(wù)器上沒my.cnf , 也沒有影響;
4. 如果服務(wù)器上產(chǎn)生的新備份和已經(jīng)存在已往備份內(nèi)容一樣則只保留時(shí)間較早的備份。因?yàn)榉?wù)器的配置文件不是經(jīng)常改動(dòng)的;
5. 通過修改定義KEEP_BACKUP_NUM為個(gè)變量,可以決定遠(yuǎn)程服務(wù)器上保留最近多少份備份,我這里定義的是10份。備份機(jī)上保留所有遠(yuǎn)程服務(wù)器的備份。因?yàn)榕渲梦募急容^小,不用擔(dān)心磁盤空間占用問題。

用過下列技術(shù)
1. 獲取遠(yuǎn)程服務(wù)器IP,如果某臺(tái)服務(wù)器沒有公網(wǎng)IP則使用該服務(wù)器的“主機(jī)名_IP.備份年月日_備份時(shí)間.tar.gz
2. 通過循環(huán)、判斷,對數(shù)組中的元素重新賦值;

下載之后請留意版本號和更新日志。

復(fù)制代碼 代碼如下:


#!/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
##################################################################

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

# Need Backup Servers And Files List
REMOTE_SERVER_TMP_DIR=http://www.3lian.com/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