当前位置:  操作系统/服务器>linux

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

    来源: 互联网  发布时间:2014-10-14

    本文导语:  功能:1. 只在备份机执行,远程的服务器只需要允许备份机用root通过密钥登录;2. 在备份机上配置需要备份哪些服务器,在NEED_BACKUP_SERVERS这个数组增减;3. 在备份机上配置需要备份服务器上哪些文件,在NEED_BACKUP_DETAIL这个数...

功能:
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
##################################################################

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


    
 
 

您可能感兴趣的文章:

  • 请问在 LINUX下如何编辑脚本(可以直接运行脚本访问WINDOW系统)
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • 关于arm linux下的别名配置脚本如何在进入用户时让shell执行的问题,如bashrc,profile,.bash_profile等脚本,寻求高手解答
  • Linux下如何编写脚本文件
  • 关于linux的脚本运行。。。求高人指点
  • linux重新启动后自动运行脚本程序
  • 谁能简单介绍一下LINUX上的各种语言脚本的功能.
  • linux shell脚本
  • 请问关于linux脚本的一个问题。
  • LINUX的系统管理脚本
  • Linux脚本
  • linux脚本中命令运行结果判断
  • 求助:linux脚本语言写SQL语句
  • window下通过ftp执行linux脚本?
  • 如何在Linux下使用脚本实现程序的自动重启!望各位详解!
  • 求linux下定时重启服务的脚本
  • linux shell脚本无法改变环境变量
  • linux能够通过执行脚本添加oracle数据库的用户吗
  • 求助:Linux 脚本如何提取MAC地址
  • 请教斑竹,在linux下怎么执行位于其他机器上的脚本
  • 大家备份windows98用ghost 估计就用得很多了, 请问linux可不可以ghost 备份? 还有linux 的资源管理器在哪里? 我想打开我原来的硬盘F
  • linux装好了要做那些shell程序做备份呢?
  • 如何实现linux邮件服务器上邮件的备份?
  • 请教老师:linux系统大家是如何备份的啊?
  • Linux 系统备份工具 Back In Time
  • Linux备份工具 Deja Dup
  • Linux备份方案询问
  • linux如何 备份系统
  • 请教ghost备份linux分区!有大大知道的请告知~谢谢~
  • 在线等:我想备份我的LINUX系统,有何方法啊!GHOST行吗?还原后LINUX还能启动吗?
  • linux 备份
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • LINUX如何配置网卡,配置TELNET,急!在线等待!
  • Linux下NFS服务配置详解
  • 求xmanager3.0 配置root用户,连接redhat linux 6.0 配置文档
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 高分求救!!!怎样在linux下配置tomcat文件?同时配置sqlServer数据库?
  • 何处有 Linux 内核编译配置详细的中文介绍? 我在重新配置编译时老是出错:-(
  • 安装linux的最低配置:硬盘,内存,以及cpu的最低配置?多谢赐教!
  • 请问:我在win2000下装了一个vMware4.5,又装了一个linux9.0,可是不会配置网络,我的虚拟机已经配置好了桥连接,可是在linux下我不知道
  • LINUX的一段DHCP配置怎样在WINDOWS 2003上配置相同的功能
  • linux路由器配置,内核配置中怎么找不到optimize as router not host选项!
  • to: wjmmml(笑着悲伤),有没有linux下的配置java、tomcat等等其他的配置文档啊,请帮忙
  • 大家好!我已经装好了红旗Linux桌面3.2正式版产品。现在我想配置通过局域网上网??请问我本机如何配置????
  • 请推荐一个配置要求低linux安装,我打算装上用来学习在linux上面做开发
  • linux下网络配置
  • 使用secureFX连接到linux上需要在linux上配置什么
  • LINUX(RH)下配置文件集
  • 如何配置linux,使windows系统可以直接打印到linux的打印机上??
  • 求教:Linux下网络配置的问题
  • 我机器配置不高,装了VMware,想装个redhat linux学linux
  • tomcat&Apache linux下配置
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3