1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > linux批量备份服务器配置文件和目录的脚本

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

时间:2023-10-27 15:18:03

相关推荐

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

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

功能:

1. 只在备份机执行,远程的服务器只需要允许备份机用root通过密钥登录;

2. 在备份机上配置需要备份哪些服务器,在NEED_BACKUP_SERVERS这个数组增减;

3. 在备份机上配置需要备份服务器上哪些文件,在NEED_BACKUP_DETAIL这个数组增减,如果需要备份某台服务器上NEED_BACKUP_DETAIL数组里定义的某个文件就备份,不存在的文件则自动跳过,例如Web服务器上没f , 也没有影响;

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 -04-06

# Copyright __. All rights reserved.

#

# Version: 1.4.6

# Revision History

# by

##################################################################

# 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 \

\

)

NEED_BACKUP_DETAIL=(\

/etc/hosts \

/etc/httpd/conf/*.conf \

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

/etc/keepalived/keepalived.conf

/etc/f \

/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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。