Bacula,被誉为开源软件中最好的备份还原软件,它提供了企业级的客户机/服务器的备份解决方案,能够通过网络来管理文件的备份,恢复和核实工作。Bacula,既有windows版本的,也有Linux,Unix的。但目前有关于其使用的文章是在太少,而且介绍的很不详细,今天,我就来和大家一起探讨一下。(最新版本2.4.3主页
[url]http://www.bacula.org[/url])
一,bacula的模型
为了部署bacula,应该了解它的主要组件。
控制器是协调备份,恢复和校验操作的守护进程。用户可以通过控制台向控制守护进程提交任务。控制台不一定非要和控制守护进程在同一台机器上,可以分离。
存储守护进程是用来写入备份数据或者读取备份数据的。它必须安装在提供存储的机器上。也就是安装了磁带机或者要将备份存放的服务器上。它和控制守护进程可以分离,不一定要安装在一起。
文件守护进程安装在每台需要备份数据的系统上。比如,你想备份网络中的某台文件服务器上的数据,那么,你就应该将文件守护进程安装在此台服务器上。
编目是一个数据库,它保存所有备份的每个文件和卷的信息。所以,它需要数据库软件的支持,现在bacula支持mysql,postgresql和sqlite。
二,设置
试验环境如下:有两台linux主机,
一台主机名为RHEL5(以下简称server),ip为192.168.0.5,系统为RHEL 5.1,角色为备份服务器兼存储服务器(另挂一块磁盘到/tmp/test/下作为存储)
另一台主机名为client。Ip是192.168.0.6,系统是RHEL5.1,角色为需要备份的主机(这里我们以/boot为要备份还原的目录)
准备工作:在server上安装mysql和gcc环境(bacula编译需要gcc),并启动mysql
在client上只需安装gcc环境
配置服务器server:
1, 解压编译安装bacula:
然后是make和make install
默认情况,bacula安装在/etc/bacula/目录下
2,创建mysql脚本
Bacula已经为我们建好了脚本,直接运行就OK,一共3个。如果不运行,后面9101端口是起不来的。
3,修改配置
作为存储服务器兼控制台,现在需要依次对bacula-dir.Conf(管全局) bacula.sd.conf(管存储)和bconsole.conf(管控制台)配置文件进行修改。
bacula-dir.conf是最复杂的一个文件,它一共有10个逻辑段:
director(定义全局),
catalog(定义日志),
jobdefs(定义备份的默认值),
job(定义特定操作),
fileset(定义备份哪些区域不备份哪些区域),
schedule(定义备份时间),
pool(定义备份介质),
client(定义要备份的主机),
storage(定义如何存储)
messages(定义如何处理消息)
因为此文件比较复杂,所以我把我配置好的文件直接贴出来,一些特别重要的地方咱们拿出来讨论
Director { # 全局的一些配置
Name = RHEL5-dir
DIRport = 9101
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/bacula/working"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1 # 定义一次能处理的并发作业数
Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI" # 这个地方必须与控制台所在主机上的bconsole.conf一致,这里是本机
Messages = Daemon
}
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = RHEL5-fd # 如果本机也需备份就在后面去定义RHEL5-fd为本机
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File
Messages = Standard
Pool = Default
Priority = 10
}
Job { # 定义一个任务
Name = "Client" # 任务的名称 后面咱们可以在bacula的控制台中看到
Client = Client # 引用后面定义的客户端“Client”,表示此任务对名字叫client主机进行操作
JobDefs = "DefaultJob"
Write Bootstrap = "/var/bacula/working/Client1.bsr" #定义备份的引导信息放在什么地方
Level = Full #定义备份类型为完全
FileSet = "Full Set" #备份的范围根据后面定义的名叫“Full Set”的操作
Schedule = "WeeklyCycleAfterBackup" #备份计划任务按"WeeklyCycleAfterBackup" 定义的执行
}
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycleAfterBackup"
RunBeforeJob = "/etc/bacula/make_catalog_backup bacula bacula"
RunAfterJob = "/etc/bacula/delete_catalog_backup"
Write Bootstrap = "/var/bacula/working/BackupCatalog.bsr"
Priority = 11 # run after main backup
}
Job {
Name = "RestoreFiles"
Type = Restore
Client=RHEL5-fd #这里就是指的RHEL5这台主机自己
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula-restores
}
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
}
File = /boot # 备份的范围,这里我根据需要只备份了/boot分区,如果要备份其他可加入相应路径
}
Exclude { # 排除的,不备份的内容
File = /proc
File = /tmp
File = /.journal
File = /.fsck
}
}
Schedule {
Name = "WeeklyCycle"
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}
FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
}
File = /var/bacula/working/bacula.sql
}
}
Client {
Name = RHEL5-fd
Address = 192.168.0.5 # 指定了RHEL5这台主机的地址,如果有DNS可以写FQDN
FDPort = 9102
Catalog = MyCatalog
Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv" # 要和RHEL5上bacula-fd.conf的一致
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Client {
Name = Client # 前面引用过的client就是在这定义的
Address = 192.168.0.6 # 告诉服务器client在什么地方
FDPort = 9102
Catalog = MyCatalog
Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2" # 要和client上bacula-fd.conf的一致
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Storage { #定义存储服务器
Name = File
Address = 192.168.0.5 # 告诉服务器数据存储在哪台机器上。这里是主机自己。
SDPort = 9103
Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd" # 要和本机bacula-sd.conf上一致
Device = FileStorage
Media Type = File # 定义以文件方式存储
}
Catalog { # 关于日志和数据库的定义
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = ""
}
Messages {
Name = Standard
mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed
for %j\" %r"
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = "/var/bacula/working/log" = all, !skipped
}
Messages {
Name = Daemon
mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/bacula/working/log" = all, !skipped
}
Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
}
Pool {
Name = Scratch
Pool Type = Backup
}
Console {
Name = RHEL5-mon
Password = "YZDfclvKrfWVkmGdGtWygMOR8ZOX7XK7MYvaFd1dIraN"
CommandACL = status, .status
}
第二个文件bacula-sd.conf
Storage { # 定义存储。本例中是自己RHEL5
Name = RHEL5-sd
SDPort = 9103 # 存储端口
WorkingDirectory = "/var/bacula/working"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}
Director {
Name = RHEL5-dir
Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd" # 与bacula-dir.conf中对应的Storage项一致
}
Director {
Name = RHEL5-mon
Password = "xyqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5"
Monitor = yes
}
Device {
Name = FileStorage
Media Type = File
Archive Device = /tmp/test # 定义备份到什么地方
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # 如果设备可用,则读取
RemovableMedia = no;
AlwaysOpen = no;
}
Messages {
Name = Standard
director = RHEL5-dir = all
}
最后一个文件bconsole.conf
Director {
Name = RHEL5-dir
DIRport = 9101
address = 192.168.0.5 # 服务器位置
Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI" # 与bacula-dir.conf中director中一致
}
现在启动进程
终于配置完毕,但还有关键的一步,添加存储介质
黄色的是要输入的部分。现在就已经进入到控制台了。
配置客户机(需要备份的client):
1, 编译安装bacula
然后make和make install
默认安装在/etc/bacula/目录下
1, 改配置文件 bacula-fd.conf
Director {
Name = RHEL5-dir # 与服务器上的bacula-dir.conf中一致
Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2" # 与服务器上的bacula-dir.conf中一致
}
Director {
Name = RHEL5-mon # 与服务器上的bacula-dir.conf中一致
Password = "yqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5" # 与服务器上的bacula-dir.conf中一致
Monitor = yes
}
FileDaemon {
Name = Client # 指自己
FDport = 9102 # 监听端口r
WorkingDirectory = /var/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
Messages {
Name = Standard
director = Client-dir = all, !skipped, !restored
}
客户端相对配置较简单。改这一个文件就行了。
然后启动进程
三,验证
经过了艰苦的工作,现在到了享受结果的时候了(呵呵,这个东东我已经弄了3天了,痛苦呀)
咱们现在先备份client下的/boot目录吧
在server上
接着
可以通过status查看状态
呵呵,看见OK了吗,备份成功了哟
接下来咱们来做还原,首先咱们把client上的/boot中的文件删除掉
现在回到server上来还原(还是在控制台)
显示如下提示
接着标记要还原内容,并且执行
这个地方注意一下,如果要还原到client原位置则按以下步骤
现在再回到client下看看
哈哈,看见了吧,刚才删掉的文件现在全部回来了
四,最后
因为手头上没有现成的资料,加上本人英语水平有限,有不足的地方还请大家谅解。
- Linux下远程备份、上传工程,重启服务器
Linux下远程备份.上传工程,重启服务器 Linux服务器实现远程,原项目的备份.删除,新项目上传,以及远程重启服务器!分成一个主shell调用三个shell文件步骤完成.mainsh.sh一次按顺 ...
- mysql 数据库的备份和还原
1. 逻辑备份 (和存储引擎无关) mysqldump -uroot -p schoolDB TSubject > /mysqlbackup/schoolDB.TSubject.sql (备份 ...
- linux实现自动远程备份(scp+ssh)
刚上线的服务器需要备份日志,要备份到另一台服务器上去,为了减少工作量,采用linux的定时任务去自动执行.因服务器都是linux的,因此采用linux的远程复制scp命令.但这里涉及到一个问题,就是s ...
- Linux远程备份—ftp方式、NFS方式
问题:现在项目中每天都有从其它各个系统发过来的数据文件(存放在/var/data目录下,以.txt结尾),虽然很久以前的文件很少用到,占用了很多空间,却不能删除.于是,想把一个月以前的文件都压缩了传到 ...
- 用rsync从Linux到Windows远程备份
论 rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来 了——remote sync.rsync支持大多数的类Unix系统,无论是Linux.Solaris还是BSD上都经过了 ...
- Linux下自动备份MySQL数据库并上传到远程FTP服务器
Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明: 1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...
- PL/SQL远程备份和恢复Oracle数据库
(转自:http://blog.csdn.net/huchunfu/article/details/25165901) 在客户端远程备份的文件保存在数据库所在主机上,不会直接拷贝到客户端.—————— ...
- Linux服务器数据备份恢复策略
一.Linux 备份恢复基础 1.什么是备份 最简单的讲,备份数据的过程就是拷贝重要的数据到其他的介质之上(通常是可移动的),以保证在原始数据丢失的情况下可以恢复数据.一次备份可能是简单的 cp命令, ...
- Linux SSH远程文件/目录 传输
Linux SSH远程文件/目录传输命令scp 2010年08月6日 上午 | 作者:VPS侦探 相信各位VPSer在使用VPS时会经常在不同VPS间互相备份数据或者转移数据,大部分情况下VPS上都已 ...
随机推荐
- UESTCOJ-BiliBili, ACFun… And More!(水题)
BiliBili, ACFun… And More! Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Ja ...
- width:100% 和 max-width:100%; 有区别吗【转藏】
这个博客是基于“Pelican+Markdown+定制的my-gum主题”的.定制的主题将博文正文页面的 右边栏去掉,这导致在Firefox等浏览器中,正文中大的图片会突破正文块的宽度,高度也得不到限 ...
- CenOs安装中文输入法
http://jingyan.baidu.com/album/d8072ac4434666ec95cefda1.html?picindex=2 查看链接
- 模版引擎(NVelocity)开发
在net中用模版开发,在handler中用到了大量的html代码.为解决这个问题,我可以采用模版引擎(NVelocity)进行开发.1.首先需要将NVelocity.dll文件放入项目,其次引用.2. ...
- Javascript 汉字转拼音
调用方式: var pinyin = convert("欢迎光临"); alert(pinyin); 新建JS文件:PYConvert.js,内容如下: var PinYin = ...
- Gulp那些好用的插件 2016.04.20
开始接触LESS.组件化编程后,慢慢意识到需要一个提高工作效率的构建工具,就此接触到了Gulp. Gulp的好处在这里就不细说啦,只有四个API接口学起来简直爽歪歪,减少了大量的I/O操作,用起来很畅 ...
- a*b(高进度乘以int类型的数)
以下是我今日的a-b(高精度)的程序,\(^o^)/偶也偶也偶也偶也! 程序: #include<stdio.h> #include<string.h> char s[1000 ...
- 【HDU1402】【FFT】A * B Problem Plus
Problem Description Calculate A * B. Input Each line will contain two integers A and B. Process to e ...
- YII 数据库相关操作
CDbConnection: 一个抽象数据库连接CDbCommand: SQL statementCDbDataReader: 匹配结果集的一行记录CDbTransaction:数据库事务 访问数据库 ...
- 开发语言大PK:php和Java哪个更好?
Java通过jdbc来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库.访问数据库的接口比较统一. PHP对于不同的数据库采用不同的数据库访问接口,所以数据库访问代码的通用性不强.例如 ...