Unix/Linux 系统自动化管理: 数据备份与同步篇(3)

来源:developerWorks 中国 作者:程 燕
  

例如执行一条简单的 tar 命令,可以使用下面的一个简单的脚本。


清单 2. tar 自动化示例脚本
 
 #!/bin/sh 
 tar -czvf backup.tar.gz /CriticalData/ 

如果我们想用其它的命令来实现数据备份,可以将以上的示例脚本中的命令部分替换掉,例如执行一条简单的 cpio 命令,可替换为下面一个简单的脚本。


清单 3. mksysb 自动化示例脚本
 
 #!/bin/sh 
 find /CriticalData/ -depth | cpio -ov > backup.cpio 

事实上我们可以通过 shell 中一些变量设置,条件测试以及流程控制语句来实现不同的需求。例如,管理员希望能够在周一到周日,通过 backup 命令做多级备份。

我们可以设置 Level 变量,当变量满足不同条件时,就可以实现多级备份。


清单 4. backup 自动化示例脚本
 
 #!/bin/sh 

 // 判读当前系统的日期是星期几
 DATE=`date | awk '{ printf $1 }'` 
 case $DATE in 
  Mon) LEVEL=1;; 
  Tue) LEVEL=2;; 
  Wed) LEVEL=3;; 
  Thu) LEVEL=4;; 
  Fri) LEVEL=5;; 
  Sat) LEVEL=6;; 
  Sun) LEVEL=7;; 
 esac 

 // 备份命令
 backup -$LEVEL -uf /dev/rmt0 /home 

虽然各种实用程序和命令以及参数各不相同,但 shell 自动化脚本的基本思路是类似的。如果系统管理员需要连续地定期地执行脚本,可以借助 Unix/Linux 系统的 crontab 功能。

rsync 的自动化实现

由于 rsync 在数据备份与同步上的优秀表现,本文将主要介绍用 rsync 来实现数据的备份与同步。

要使用 rsync,只需要将主服务器安装并配置成为 rsync 服务器,将另外一台装有 rsync 的机器作为备份客户端。在对 rsync 服务器配置结束以后,就可以在客户端发出 rsync 命令来实现将服务器端的文件备份到客户端来。在客户端创建自动化脚本,并启用 cron 服务,就可以定期对主服务器的数据进行自动备份与同步。

  1. 在服务器端手动创建 rsync 配置文件

    创建 rsync.conf 作为服务器配置文件

    假设我们在服务器端,设置需要备份的目录 /CriticalData, 但不需要备份 /CriticalData 目录下的 Common 目录。

    先创建一个目录,用于存放 rsync 相关配置文件

     # mkdir /etc/rsyncd 
    

    创建 rsync.conf

     #touch /etc/rsyncd/rsyncd.conf 
    

    编辑 rsyncd.conf

    清单 5.rsyncd.conf 配置文件



    清单 5.rsyncd.conf 配置文件
     
    gid = users                     
    read only = true
    use chroot = true
    transfer logging = true
    log format = %h %o %f %l %b
    log file = /var/log/rsyncd.log
    pid file = /var/run/rsyncd.pid
    secrets file = /etc/rsyncd.secrets
    hosts allow = 192.168.0.0/255.255.255.0
    max connections = 5
    timeout = 300
    motd file = /etc/rsyncd/rsyncd.motd
    
    [CriticalData]
    path = /CriticalData          
    list = true
    ignore errors      
    comment =This is Critical Data
    auth users = rsync    
    secrets file = /etc/rsyncd/rsyncd.secrets
    exclude = Common/   
    

    rsync.conf 中主要分为全局变量和模块两部分。模块用 [ ] 表示,模块之前的为全局变量。

    重要参数说明:

    path
    指定该模块所定义的备份目录的路径,该参数是必须指定的。

    exclude
    用来指定多个由空格隔开的多个文件或目录 ( 相对路径 ),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 --exclude 参数。一个模块只能指定一个 exclude 选项。但是需要注意的一点是该选项有一定的安全性问题,客户端很有可能绕过 exclude 列表,如果希望确保特定的文件不能被访问,那就最好结合 uid/gid 选项一起使用。

    auth users
    该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户不一定是客户端存在的用户。如果"auth users"被设置,那么客户端发出对该模块的连接请求时,需要对用户身份进行验证。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块 ( 也就是匿名方式 )。

    创建 rsync.secrets 作为用户密码文件

     #touch /etc/rsyncd/rsyncd.secrets 
     #chmod 600 /etc/rsyncd/rsyncd.secrets 
    

    编辑 rsyncd.secrets, 格式为“用户 : 密码”

     rsync:passwd 
    

    注意:rsync是服务器上存在的用户,同时将/CriticalData的使用者改为rsync

     #chown -R rsync /CriticalData/ 
    

    创建 rsync.motd 作为登录消息文件

    此文件是选择性配置文件,也可以不创建。

     #touch /etc/rsyncd/rsyncd.motd 
    

    编辑 rsyncd.conf

     ============================
    This is Critical Data Server
    =============================
     

  2. 启动 rsync

    将 rsync 启动

     #/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf 
    

    可以将这个命令写入 /etc/rc.d/rc.local 中,当系统启动时,自动运行 rsync。

  3. 创建脚本

    在客户端创建一个 /root/rsync/ 目录用来存放自动化脚本和其它文件。

    创建 /root/rsync/rsync.sh 自动化脚本,保证权限为 755。



    清单 6. rsync 自动化示例脚本
     
     #!/bin/sh 
    
     export RSYNC_PASSWORD=passwd 
     export PATH=$PATH:/bin:/usr/bin:/usr/local/bin 
    
     // 设置远程服务器与需要备份的目录
     SERVER=rsync@Server 
     DIR=CriticalData 
    
     // 设置客户端上的用于备份的目录
     BDIR=/Backup 
     BASE=Current 
     INCREMENTDIR=`date +%Y-%m-%d` 
    
     // 在客户端灵活使用 exclude 功能;设置日志
     EXCLUDES=/root/rsync/excludes 
     LOG=/tmp/rsync.log 
    
     // 参数设置,调用 backup-dir 将服务器端的增量文件存储到 INCREMENTDIR 目录下
     OPTS="-avz--force --delete --delete-excluded  --exclude-from=$EXCLUDES -b 
     --backup-dir=$BDIR/$INCREMENTDIR --ignore-errors"
    
     // 确保客户端上的用于备份的目录存在
     install -d $BDIR/$BASE 
    
     // 实现数据备份与同步,将日志邮寄给 root 用户
     run_rsync() 
     { 
     echo "==========Begin rsync: `date`===========" >>$LOG 2>&1 
     du -s $BDIR/* >>$LOG 2>&1 
     rsync $OPTS $SERVER::$DIR $BDIR/$BASE  >>$LOG 2>&1 
     echo "==========End rsync: `date`===========" >>$LOG 2>&1 
     mail root -s "Backup Report" < $LOG 
     rm $LOG 
     } 
    
     // 条件测试,运行程序
     if [ -f $EXCLUDES ]; then 
            if [ -d $BDIR ]; then 
                    run_rsync 
            else 
                    echo "cant find $BDIR"; exit 
            fi 
            else 
                    echo "cant find $EXCLUDES"; exit 
     fi 
    

    执行完 rsync.sh 后,可以查看 /Backup 目录来检查数据的正确性。将有两种目录,一个是 Current 目录,用于存放当前服务器端备份和同步后的数据。在脚本运行过程中,进行增量传输。另外还有一个类似于 2009-06-16 的目录,用于存放已在服务器端删除的增量数据。目录的名称将根据脚本执行的日期定义。


    时间:2009-08-20 16:46 来源:developerWorks 中国 作者:程 燕 原文链接

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量