源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-04-11 09:43 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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. 通过循环、判断,对数组中的元素重新赋值; 下载之后请留意版本号和更新日志。
[u]复制代码[/u] 代码如下:
#!/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
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部