linux批量备份服务器配置文件和目录的脚本
2013-08-02 00:00
441 查看
功能:
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 ################################################################## # 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批量备份服务器配置文件和目录的脚本
- U-Boot-1.1.6顶层目录mkconfig脚本配置文件详细分析
- U-Boot-1.1.6顶层目录mkconfig脚本配置文件详细分析
- IIS虚拟目录内的视频文件访问出错:HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- mysql启动脚本——指定数据目录并指定配置文件
- 清理SVN目录中配置文件.svn的bat脚本
- shell脚本中执行时提示“没有那个文件或目录”的解决办法
- iis报错:404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本,请添加处理程序。如果应下载文件,请添加 MIME 映射。
- [11月12日的脚本] 配置虚拟内存页文件大小 (PowerShell)
- apache 目录权限配置文件
- LNMP安装目录、配置文件位置、目录文件位置
- iredmail下安装脚本分析(一)---get_all.sh 文件所在目录为PKGS
- shell脚本获取配置文件中的内容
- [Perl]FTP自动上传文件的脚本以及配置文件
- 用shell脚本将当前目录中每个文件的文件名及其内容显示出来
- Spring Junit 读取Resource、WEB-INF目录下的配置文件
- vue-cli脚手架build目录中的build.js配置文件