自动备份的简易实现
软件世界
前言:备份是存储管理的重要内容之一。很多网络存储管理软件,例如Veritas、Legato、IBM Tivoli都能够提供企业级的自动化信息保护、自动化应用的高可用性以及自动化内容、通讯和存储管理。
但因这些软件价格比较昂贵,很多企业并没有采用,所以很多系统管理员每天都在做着同样的工作:对数据进行备份。本文将为大家介绍一种简易的方法,在SCO UNIX环境中实现Sybase数据库的自动备份以及异地保存,并实现部分的网络存储管理软件的功能。文中给出的shell脚本,对其它的数据库备份,例如AIX,HP Unix上的数据库的备份和迁移也可起到抛砖引玉的作用。
备份需求
具体的业务要求是这样的:让所有数据库在凌晨1点做完全备份,在每日凌晨6点将备份下来的数据库文件传送到IBM小型机的磁盘阵列上,如图所示。我们假设:SafeMis库位于A机(100.110.1.22),SEA、saec、subsaec、ipsdb位于B(100.110.1.20)。把A机的SafeMis 库 和 B机 的SEA、saec、subsaec、ipsdb数据库备份出来并传递到小型机的磁盘阵列上。每天自动备份一次,每7天一个循环。实现在磁盘阵列上,始终保持最近7天的数据备份的功能。
程序原理及部署
程序的原理是利用Unix的重定向功能。将事先写好的脚本重定向到输入上,传递给系统程序isql和ftp,分别实现数据库备份的导出和传输文件的自动化。由系统的crontab 来自由确定执行时间。为此,我们编写了相应的脚本程序,该程序由两部分组成。一是数据库备份脚本,取名规则可定为IP地址+bak。用于数据库备份的导出。二是传送脚本。把已经备份下来的数据库文件传送到远程目的机器设备上。
程序分别在A机、B机上执行,由数据库sybase用户执行,程序所存放的地方是 /usr/sybase/。在不同的机器上脚本程序有所不同,例如:在B机(100.110.1.20)存放的程序的名称是:20bak为数据库备份脚本。20ftp.1,20ftp.2,20ftp.3,20ftp.4,20ftp.5, 20ftp.6, 20ftp.7为FTP传输脚本。意思是:星期一对应20ftp.1, 星期二对应20ftp.2……星期日对应的是20ftp.7。
安装及移植方法主要有三个步骤:以B机为例,首先将下面的shell范本文件拷贝成20ftp1,…20ftp.7,目录在/usr/sybase下(sybase 是默认的数据库用户)。其次结合本地实际,用vi 编辑shell文件中相应的IP地址和数据库名称(也可用Ultra Edit)。最后用Sybase用户登录,参照contab 范本建立自己的定时文件。(命令是 crontab –e)
备份文件范本
在备份文件范本里体现了具体的业务要求,是自动备份实现的重点。对一些相关数据库的备份也有一定的参考价值。下面是具体的实现:
#利用环境变量存日期,使备份文件带上日期,以利于分别。如SafeMis20040606
rq=`date '+%Y%m%d'`
export rq
echo $rq'*****************************************'
mkdir bak >/dev/NULL
cd /usr/sybase/bak
#利用名为tt的临时文件拼接备份的SQL语句
echo ' ----begin dump database SafeMis'$rq
echo ' ' >tt
echo dump database SafeMis to '“'/usr/sybase/bak/SafeMis$rq'”' with init >>tt
echo go >>tt
#isql实现重定向,导出数据库备份文件
/usr/sybase/bin/isql -Usa -P -SBOP -i/usr/sybase/bak/tt #BOP 是server名
echo 'end of dump database SafeMis'$rq
echo ' '
#同理,备份SEA库
echo ' ----begin dump database SEA'$rq
echo ' ' >tt
echo dump database SEA to '“'/usr/sybase/bak/SEA$rq'”' with init >>tt
echo go >>tt
/usr/sybase/bin/isql -Usa -P -SBOP -i/usr/sybase/bak/tt
echo 'end of dump database SEA'$rq
cd ..
FTP备份脚本文件 (以星期一备份脚本FTP.1为例)
user root root # FTP登录的用户名、口令,可以是别的对sybasebak目录有写权限的用户
binary #二进制传输方式
prompt off
hash #打开显示,利于重定向跟踪
lcd /usr/sybase/bak
cd /sybasebak/SafeMis/1 #进入相应的目录。1 表示星期一
mdelete SafeMis* #删掉上个星期的备份文件
mput SafeMis*
cd /sybasebak/SEA/1 #开始传SEA数据库备份文件
mdelte SEA*
mput SEA*
!rm SafeMis* #上传完毕,删掉本级的备份文件。
!rm SEA*
bye
contab 范本:
54 15 * * * /usr/sybase/20bak >/usr/sybase/bak/database.log
10 6 * * 1 ftp -n 100.110.1.40/usr/sybase/bak/ftp1.log
10 6 * * 2 ftp -n 100.110.1.40/usr/sybase/bak/ftp2.log
10 6 * * 3 ftp -n 100.110.1.40/usr/sybase/bak/ftp3.log
10 6 * * 4 ftp -n 100.110.1.40/usr/sybase/bak/ftp4.log
10 6 * * 5 ftp -n 100.110.1.40/usr/sybase/bak/ftp5.log
10 6 * * 6 ftp -n 100.110.1.40/usr/sybase/bak/ftp6.log
10 6 * * 0 ftp -n 100.110. 1.40/usr/sy base/bak/ftp7.log
代码解释
15点54分,定时执行/usr/Sybase/20bak, 它的定时信息写到/usr/Sybase/bak/database.log。
每天6点10分 将dump下的数据库文件ftp到100.110.1.40的/sybasebak/备份到相应目录下。
小提示:实际使用中容易出现的问题是:一定要保证Sybase backup server在运行,否则无法dump数据库,shell脚本无法成功运行。可以用/usr/Sybase/install/showserver 检查backupserver是否启动,否则可以用如下命令启动:RUN_SYB_ BACKUP &。最后,因为ftp的脚本文件中备份机器的用户名和口令都是明文的。所以不要忘了对20bak、ftp.1、ftp.2……ftp.7设置相应的权限以保障安全性。
小结
经过以上的操作后,系统每天凌晨将自动产生一个备份,并且自动将备份文件分别拷贝到另一台主机上。系统管理员需要做的是,不定期检查一下备份情况而已。这样,我们就可以从备份数据的繁琐工作中解脱出来。而数据库也实现了异地备份,相应的安全性也大大提高了。

