linux批量备份服务器配置文件和目录的脚本
2013-08-03 07:16
302 查看
这篇文章主要介绍了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. 通过循环、判断,对数组中的元素重新赋值;
下载之后请留意版本号和更新日志。
功能:
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 # edit 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批量备份服务器配置文件和目录的脚本
- linux批量备份服务器配置文件和目录的脚本
- linux批量备份服务器配置文件和目录的脚本
- linux批量备份服务器配置文件和目录的脚本
- IIS虚拟目录内的视频文件访问出错:HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- 清理SVN目录中配置文件.svn的bat脚本
- mysql启动脚本——指定数据目录并指定配置文件
- U-Boot-1.1.6顶层目录mkconfig脚本配置文件详细分析
- U-Boot-1.1.6顶层目录mkconfig脚本配置文件详细分析
- shell脚本删除目录下的指定文件
- tomcat目录结构与配置文件,web应用的目录结构
- 利用shell脚本监控目录内文件改动
- 小脚本,统计一个目录下满足特定条件文件的代码行数
- copy命令及库文件至/mnt/sysroot/目录shell脚本
- Openwrt系统中shell脚本获取配置文件信息解读
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- bat脚本获取当前文件所在目录
- php-fpm配置文件,指定session保存目录
- 这是一个定时脚本,主要功能是遍历该文件夹下的所有文件并存储到数组,对数据中的文件进行操作,一个一个移动到指定的目录下,并删除原有文件
- php文件包含目录配置open_basedir的使用与性能分析