最近与几个朋友聊天谈到linux系统中的备份与恢复的事情,你们以为现有的linux平台上不多有比较方便易用的增量备份软件,固然这类软件已经不少了,不少人用tar、dump、rsync等命令也能够备份,但它们不是没法实现增量算法,就是技术性太强参数难以掌握,商业上的软件又太贵,安装和操做都较复杂,某些开源软件功能虽然强大易用性很差,操做体验不适合国内的用户,我以前在chinaunix论坛上发表过一篇关于bacula备份软件的文章(原文地址是 http://bbs.chinaunix.net/thread-2002076-1-1.html ),也研究过Amanda,BackupPC等等,都不理想,界面不友好,咱们的设计目标就是“简单方便”,“注重操做体验”,"基于web操做",凭借兴趣和爱好,本身设计并开发了这款web管理方式的远程数据增量备份/恢复管理软件,我我的是很是看好html5的将来发展的,web界面也使用了一些html5的元素,介绍一下这款软件,欢迎你们拍砖,更欢迎提出友好的建议,你们但愿具有的功能也能够提给我。html
特色,安装部署上的不少细节工做全由程序解决,不让用户作多余的手工配置:前端
1)登陆界面html5
2)登陆以后的主要界面,在这里用户能够经过建立任务的形式来建立备份任务,软件采用server与client的角色,在这个server界面中用户能够统一管理网络中不一样的有备份需求的客户端,一旦建立成功,server就与client完成了一些必要的网络链接配置,之后只要保证网络是联通的,就能够随时进行数据的远程备份与恢复,局域网或互联网都可以,server角色能够链接后端大容量存储,将传输的数据保存到存储设备之上,固然普通硬盘也能够。备份的起始时间,备份类型,备份结果;恢复的起始时间,恢复类型,恢复结果均可以一目了然。支持手动备份与定时备份,两种备份状态也能够记录下来。mysql
3)建立任务的界面,采用JQuery实现,备份口令与恢复口令能够不一样,方便未来备份与恢复人员角色能够不一样。linux
4)下面是任务建立中的定时标签页面,支持动态添加或删除定时信息,很是灵活。web
5)任务建立中的邮件报告标签页面,在这里我作了一个相似foxmail的邮件客户端,用户配置了smtp,邮件账户和口令,并打开邮件通知的开关以后就能够对每次备份或恢复的状况发送免费的邮件报告了,由于考虑到数据量大的时候备份状况没法实时了解,因此设计邮件报告的机制很是灵活,报告中的信息也是很是准确的,能够了解系统的不少状况。算法
6)在建立任务时,若是网络问题或客户端存在防火墙,那么任务的建立将会失败,原理是,远程备份任务的建立实质是为备份任务与远程Agent端完成一些必要的数据传输、受权等操做。没有这些前期的交互配置是没法去对远程主机进行备份操做的(没有权限),好在我已经设计好这些配置彻底自动化,不须要用户去作,客户端只要安装了便可,不用作任何的配置(固然,iptables若是开了是要配置一下的,要容许tcp/ip协议5610端口)。sql
7)手动备份界面,这里我设计了两种备份模式,一个是后台模式:数据量超过1G时建议使用这种模式,任务将在后台自动运行,这种模式能够与邮件报告配合的很好,没必要让用户等待备份结束,后台执行完后自动给用户发送报告。前台模式:适合数据量少的时候,备份执行完成后将当即在web窗口中显示整个备份过程的详细信息与结果。chrome
8)浏览日志界面,在这里可以查到全部的日志记录,供管理员参考,点击“清空日志”将会清空全部历史日志,并记录“清空日志”操做的时间。日志显示的顺序是最新的记录优先在最上面。数据库
9)登陆首页面在ipad平板电脑上的显示效果,由于采用的html5+JQuery代码,因此对主流浏览器firefox,chrome,opera,safari的支持很是好,基本上都不会有操做上的问题。IE浏览器访问会出现错位状况。
10)登陆后的页面在ipad平板电脑上的显示效果,支持ipad操做。
11)登陆首页面在iphone4s手机上显示的效果
12)登陆后的页面在iphone4s手机上显示的效果
Changlog
1)增长了建立备份时对备份和恢复最大传输速率的限制功能,此功能能够有效的限制传输速度的最大速率,适用于用户的服务器在工做时间内的备份操做或者恢复操做的场景,此功能能够有效的避免对网络带宽的占用,避免与用户正常网络访问资源的争抢。
输入数字0或者不设置均表示无最大传输速度限制。
此功能能够在建立备份任务时设置,也能够在任务建立完成后修改。
2)修正了V1.0版本中删除任务时仅从数据库中删除任务而没有将任务工做目录删除的问题。
3)改进了日志查看的顺序,将最新的操做日志显示到页面的最上面,方便用户查看。
4)增长了断点续传的功能,本功能场景描述:当在传输过程当中由于网络问题或其余缘由致使传输中断,此时某个文件传输了一部分,当问题解决以后再次从新传输,那个上次传了一部分的文件不会再从新开始传输而是会接着上一次传输中断的地方继续传,直到完成所有传输。这个功能能够有效的节约备份或恢复的传输时间,节约网络资源的占用,通过屡次测试效果很理想,因此添加到V1.1版本中。传输了一部分的文件将会保存到server端的叫Zebra_Partial的临时目录中,例如:/storage1/……/Zebra_Partial,当所有传输完成后这个目录将会消失,若是存在则意味着您有未传输完的文件。
Changlog
1) 修改了登陆后,右上角没法正常显示登陆用户信息的问题,即修改了老是显示“用户名: #username#”的问题。
2) 备份的Web程序增长了对mod_perl模块的支持,并在安装过程当中自动判断操做系统中是否已经安装了该模块,若是检测Apache没有安装该模块,安装程序会自动经过yum方式来安装mod_perl软件包及其依赖软件包,自动完成Apache支持mod_perl的配置并自动重启Apache Server进程。
Changlog
1) 修改了“执行方式”中手动执行/定时执行内容在翻页后不显示的问题;
2) 增长了一个比较重要的功能“恢复Agent配置”的功能,这个功能能够恢复被从新安装的Agent端的配置。这是用户提出的一个比较现实的需求,当Agent端因某种缘由被从新安装之后,没法使用Server端将数据恢复回去,由于Agent端与Server端相应的配置不统一,认证丢失,相关的传输没法进行。作为一个备份/恢复软件,必然要解决这种问题,V1.2版本知足了这个需求,只要Server端是正常的,就可以恢复任意Agent端的配置文件及备份的数据,而是是一键恢复简单快速。
3) 修改了软件中的一些冗余代码,修改了建立任务时的后台脚本,建立速度加快一些。
Changlog
1)更新了对mysql5.6.x版本的支持,主要解决了【Field 'ssl_cipher' doesn't have a default value】这个错误问题。
2)增长了“在线帮助”的页面,点击连接后弹出新的标签页。
----- 2013-06-06 开发Zebra_MirrorBackup_ServerV2.0版本 -----
Changlog
备份的改进:
1)改进了备份后在页面上的显示,第一次将进行一次完整的全备份,界面上的备份状态也将显示“完整”二字。这不只是页面上的变化,后台备份执行时的参数也分红了2个,程序会自动判断是不是第一次备份而后自动选择;以下图:
2)增长“重复数据删除技术”,每次新备份都将与最近的前一次备份作比较,未变化的文件直接作硬链接,变化的数据才会传输,备份效率大大提升,磁盘空间占用减小。这种技术能够实现每次备份都是一份完整的全数据且在空间占用上不会额外增长,对完整的恢复任意一天的数据提供了方便;
3)借助新增的“重复数据删除技术”软件提供了多份备份副本,使恢复时也能够恢复到任意一天备份过的数据;
目前副本默认保存3份,按天划分,即天天一个副本,同一天内屡次执行备份都将视为一个备份副本,会在一个副本内作增量更新,未来容许在必定范围内用户自定义保存副本的个数(会在图形界面上增长接口);
4)增长对旧数据删除的技术,若保存3份,即3天的数据,那么会自动删除前3天的旧数据,举例,保存 1,2,3,三天的数据,在第四天备份之后将删除第一天的数据;在删除旧数据时,提供判断此备份是不是当前惟一的一个备份,避免在用户忘记备份后,机械的删除了惟一备份的状况;
恢复的改进:
1)恢复时增长对是否曾经作过备份作检测,若还未作过备份,给出提醒让用户先执行一次备份(之前会直接报“找不到恢复数据”的错误);
2)恢复时增长对恢复数据的有效性作检测,若备份过但数据丢失了,也将给出提醒;
Changlog
1)在建立备份的时候,提供了2种方案选择,“多副本重复数据删除” 和 “镜像备份(适用于双机无存储)”。
2)修改了安装脚本,在安装某些依赖软件的时候判断是否已经安装避免重复安装。
Changlog
1)修改了包名为 Zebra_BackupRecover_ServerV2.1
2)修改了backup_multi_template模版:
在没有连续备份状况下,删除3天之前的代码就不会生效,此时,咱们会找出备份目录下的全部旧数据,把$last_backup以前的旧备份目录都找出来。目前的操做只是找出来并记录到了del_old.log日志中,能够增长删除的动做,删除last_backup.txt记录的旧备份以前的因此备份。
1)修改了agent包中的services注册名称,对应性更好,修改成
# add services for Zebra_BackupRecover_Agent
backup_agent 5610/tcp # incremental backup agent
backup_agent 5610/udp # incremental backup agent
ChangLog
1)修改了report_email_template.pl文件
my $password = '';
这里把“”改为了‘’,解决了当用户在web前端设置密码时若是密码中含有特殊字符,例如@这种时,report_email.pl程序在执行时将会报错,致使没法正常执行,改成单引号就没问题了。
my $ip = "";
这里去掉了原来的$ip变量值(原来是my $ip = `ifconfig |grep addr:|awk -F : '{printf \$2}'|awk '{print \$1}'`;)由于原来的ip变量获取本地ip地址,发送的报告内容应该显示agent端的ip地址才对,显示本地ip地址是错误的,由于report_email.pl脚本在server端执行,显示server端本地的ip会使用户不知道该报告到底备份的是哪一个agent的报告。
正常登陆后,导航栏显示正常,只是找不到“建立备份”按钮,这种现象出现的缘由主要与系统中的mysql软件相关。
缘由之一:系统环境变量没法正确找到mysql命令所在的位置。系统中的mysql不是采用rpm包方式安装的,采用tar源码包或其余方法安装(例如手动copy),这种方式很容易致使系统环境变量没法正确找到mysql命令所在的位置。
解决方法:手动将tar源码包安装后的命令路径写进/etc/ld.so.conf文件中。或者在/usr/bin下建立一个软连接就能够了。
缘由之二:mysql的默认root用户的口令是空的,Zebra备份软件在安装时会默认使用root用户的空口令来链接mysql,用来方便的建立数据库和数据表,若这里预先设置了root用户的口令,安装程序就没法建立数据库和数据表了。
解决办法:建议用户先置root口令为空(指mysql中的root用户口令不是Linux系统的root用户),待安装完成后在设置一个复杂的口令。
缘由之三:系统中缺乏Perl的DBD::mysql模块。Zebra备份软件是由Perl程序开发完成的,链接mysql数据库时采用的就是 DBD::mysql模块,通常来讲Linux系统能够自带这个模块,但因为管理员在安装Linux操做系统时没有选择安装这个模块,致使Zebra备份 软件没法正常操做mysql数据库。
解决办法:这里给出一个完整的安装mysql+DBI+DBD模块的方法(rpm包)
rpm -i mysql mysql-devel mysql-server
rpm -i perl-DBI
rpm -i DBD-MySQL
rpm -i zlib-devel
注意:系统中的mysql安装必须安装mysql、mysql-devel、mysql-server三个软件包,这样才能保证正常安装DBI和DBD
错误提示以下:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
解决办法:安装过程当中若出现这两条错误信息,说明您的系统中已经安装了mysql服务,可是mysql服务器的默认启动参数作了修改,mysql.sock文件位置作了改变。在这种状况下,如何能正常使用Zebra backup备份软件呢,是否要从新安装一个mysql服务器?仍是要修改mysql服务器的参数?答案是都没必要,您的系统环境咱们不作任何改变,只要您简单的执行下面的语句,就全搞定了。
找到您系统中当前工做的mysql.sock文件位置,而后作一个符号连接
# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
一切OK了,卸载后再次安装就能够了。
分析问题:CentOS 6.3系统中自带的Mysql 5.1.61版本不存在这种问题,而从官网下载的mysql 5.6.10版本在使用insert into user命令建立用户时,会出现这类的错误,缘由是新版的mysql强制要求用户在使用insert命令插入user表来建立用户时,必须强制要求给出“ssl_cipher”,“x509_issuer”,“x509_subject”这三个字段一个默认值。
解决办法:使用下面的语句从新建立mcadmin用户,给出那三个字段一个空的默认值。
insert into user (user,host,password,ssl_cipher,x509_issuer,x509_subject) values ('mcadmin','localhost',password('YourPassword'),'','','');
这个问题我已经在新安装包里更新了,不须要手动修改。
rsync: mkdir "/storage1/1/192.168.123.75/opt" failed: No such file or directory (2)
分析问题:说明rsync在建立镜像目录结构的时候,缺乏权限。
解决办法:检查/storage1目录的属主是不是apache:apache,如果软连接,那么真实的storage1目录属主必须也是apache:apache才行。
假设A机上有数据/home/shen目录,该目录已经成功备份到B机上保存。
恢复时必须保证A机上的/home/shen目录是存在的,备份软件才可以正确的将备份的数据恢复回去。若/home/shen目录不存在请随便建立一个,恢复回去后的属主和权限将自动更新为您原来的样子。
(六)安装后登陆界面显示正常,输入用户名(admin)和默认口令(zebraadmin)后,没法正常访问登陆后的页面,如何处理?
分析过程:手动执行main程序,看看有什么输出
cd /var/www/cgi-bin/backup
./main
Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at -e line 35.
BEGIN failed--compilation aborted at -e line 35.
若输出如上面所示,表示Linux系统未安装perl的CGI模块。
解决办法:可使用 yum install perl-CGI 来安装解决。