这篇文章主要介绍了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

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

  1. linux 批量同步,多主机目录到备份服务器批量同步脚本

    为了方便同步多个主机的目录到备份服务器,写了如下脚本: #!/usr/bin/perl use strict; use File::Spec; use File::Basename; use File ...

  2. linux批量修改文件名多目录,Linux下批量修改文件名

    2, Perl 版本的批量重命名,带有Perl的好处是,你可以使用正则表达式来完成很奇特的功能. perl 版本的参数格式: rename  perlexpr files 注意,perl版本的rena ...

  3. linux批量切割图片,MAC中用Shell脚本批量裁剪各种尺寸的App图标

    在APP上架前,一次一次自己剪裁上架需要的各个尺寸的Icon不是程序员该干的事,使用Mac中自带的sips工具可以解决这个需求. 关于sips,在终端中直接执行可以出现以下信息: sips 10.4. ...

  4. Linux下把目录拷贝到全部同名目录的脚本

    需求:拷贝文件夹到Linux文件夹下.覆盖该Linux文件夹下全部同名文件夹 目标:Linux下,运行本脚本.输入目录名.就可以批量复制覆盖. 使用说明:     先把本脚本文件和要复制的文件夹移到将 ...

  5. python批量拷贝数据脚本_使用python来玩转ensp~3-写个批量备份配置文件脚本

    目录回顾: 根据前面所学习的知识,可以远程登录设备下发命令等,现在已经可以转化为生产力了哈,今天小Q要实现的就是一个批量备份配置的小东西, 小Q通过学习产品文档了解到,可以通过以下四种方法进行备份配置 ...

  6. 在linux批量删除多级目录下同一格式的文件

    在linux批量删除多级目录下同一格式的文件,可采用find + exec命令组合: 如在删除指定目录下的,所有子目录中,后缀为.doc的文件方法为: find file_path -type f - ...

  7. linux中间隔10ping一次脚本,linux批量ping脚本shell

    linux批量ping脚本shell *ping失败后的返回字符串 5 packets transmitted, 0 received, 100% packet loss, time 3999ms* ...

  8. shell脚本批量生成配置文件

    如果管理的站点和服务器较多的情况下,每次修改配置文件都相当痛苦.因而想到了用shell脚本来批量生成配置文件和配置数据.下面这个脚本是为了批量生成nagios监控配置文件的一个shell脚本程序.其原 ...

  9. linux系统下shell命令使用通配符批量创建文件或目录

    linux系统下shell命令使用通配符批量创建文件或目录 批量创建log文件 批量创建文件夹 批量删除目录 批量创建log文件 touch {1..5}.log 批量创建文件夹 mkdir dir_ ...

最新文章

  1. SpringBoot-400-Bad-Request(Request-header-is-too-large)
  2. DTP模型之二:(XA协议之二)jotm分布式事务实现
  3. java线程池的使用
  4. JSON,java对象转json
  5. 从微软的DBML文件中我们能学到什么(它告诉了我们什么是微软的重中之重)~四 分部方法从另一方面定义了类型的操作规范...
  6. 美国计算机生物学要求,美国大学CS专业分支生物信息学和计算生物学专业 Bioinformatics and Computational Biology介绍...
  7. unity5.x C# 获取屏幕宽度 设置不受重力影响
  8. 爬虫 404 try_和我一起学爬虫
  9. [机器学习] Apriori算法
  10. JavaScript中的纯函数是什么?
  11. 【Level 08】U06 Good Feeling L5 Now showing in theaters
  12. android 时间差格式化,计算2天之间的时间差android
  13. sqlldr导入数据(以PostgreSqlOracle为例)
  14. laravel php 语法,Laravel之Resource Route的点语法小技巧_PHP开发框架教程
  15. 台大Machine Learning 2017Fall HW0字数统计和图片淡化 解答
  16. 【PS】106个水彩花卉和树叶画笔
  17. java put 语句_Java put语句
  18. 从mitt、tiny-emitter源码中学习手写订阅发布
  19. 计算机基础知识--->对张海藩老师所著《软件工程》的这本书的一些知识总结
  20. python学习5(input函数)

热门文章

  1. C语言中图形方式界面怎么,「分享」C语言如何编写图形界面
  2. mysql 指示符安装,Mysql的安装
  3. 动态规划/贪心总结(一)
  4. c语言的转义字符要求,C语言…转义字符的使用
  5. 信息系统项目管理师优秀论文:项目风险管理--jiangyiwu
  6. 读债务危机0804:美国债务危机与调整(2007到2011)-泡沫出现
  7. Java中Socket通信-客户端向服务端发送照片
  8. AndroidStudio下载安装教程(图文教程)
  9. Winform中对DevExpress的RadopGroup的Description、Value、Tag、Text的理解与使用
  10. SqlServer 2014 还原数据库时提示:操作系统返回了错误5,,拒绝访问