CentOS7安装配置Bacula yum方法

时间:2021-08-26 02:09:59

参考:

https://www.baidu.com/link?url=o2QIy2YZWjsJPAFJuYFhrH3nPvtyRkSe-o5Q_FqFZ5E1EMOsIOmGeKm0HAonwHOw8WRbAKFIU1vmgAlSzC0P00CoW3DcbFJtyRPsyTbJrMq&wd=&eqid=8443d615000387c4000000065b6a8bd6

https://blog.csdn.net/hexuan1/article/details/46820723

https://blog.csdn.net/u011016554/article/details/50446458

介绍

Bacula是一个开源网络备份解决方案,允许您创建备份和执行计算机系统的数据恢复。它非常灵活和健壮,这使得它,虽然配置稍微麻烦,适合在许多情况下的备份。备份系统是在大多数服务器基础架构的重要组成部分 ,从数据丢失恢复往往是灾难恢复计划的重要组成部分。 在本教程中,我们将向您展示如何在CentOS 7服务器上安装和配置Bacula的服务器组件。我们将配置Bacula执行每周作业,创建本地备份(即其自己的主机的备份)。这本身并不是Bacula的特别引人注目的用途,但它将为您创建其他服务器(即备份客户端)的备份提供一个良好的起点。本系列的下一个教程将介绍如何通过安装和配置Bacula客户端以及配置Bacula服务器来创建其他远程服务器的备份。 如果您想使用Ubuntu 14.04代替,请点击此链接: 如何在Ubuntu 14.04安装Bacula的服务器 。

bacula的功能特点与原理:

一、bacula是什么
bacula是一款开源的跨平台网络备份工具,它提供了基于企业级的客户端/服务器的备份恢复解决方案,通过它,系统管理人员可以对数据进行备份、恢复,以及完整性验证等操作,同时,它还提供了许多高级存储管理功能,使系统管理人员能够很容易发现并恢复丢失的或已经损坏的文件。bacula既有Windows版本的,也有Linux和UNIX版本的。

二、 bacula适合哪些用户
如果业务系统数据量巨大,每天都在迅速增长,还需要以tar打包方式进行低级备份,并且没有相应的异地容灾策略时,那么就应该考虑使用bacula。bacula拥有一个完美的增量备份功能,同时还支持远程容灾备份。通过bacula,可以将数据备份到任意一个远程主机上,用户只需要对bacula进行简单的设置即可自动完成数据备份。
如果用户已经拥有一套存储设备,如磁盘阵列、磁带/带库,只是需要将业务数据从服务器自动备份到这些存储设备上,bacula无疑也是最佳选择,因为bacula具有介质管理功能,利用它可以轻松地实现将服务器数据保存到一个或者多个已经挂载的磁带或带库中。虽然商业的备份软件也能完成将数据自动备份到存储设备上,但代价昂贵。
对于正在使用一个商业的备份软件如legato和Veritas等的用户,更应该尝试一下bacula,因为bacula完全可以和这些商业软件相媲美,更重要的是,bacula是开源软件,如果某些关键功能无法通过实现,可以选择修改开源软件代码的方式来实现。通过对开源软件进行简单的修改来满足特殊需求,大大简化了用户的工作。

三、bacula的功能特点

1.支持多种备份方式
(1)完全备份
完整备份就是完整地备份业务数据。例如,星期一用一盘磁带对整个业务系统进行备份,星期二用另一盘磁带对整个业务系统进行备份,依此类推。
这种备份策略的优点是:当发生数据丢失时,只要用一盘磁带(即灾难发生前一天的备份磁带)就可以恢复丢失的数据。当然,它也有不足之处。首先,由于每天都对整个系统进行完全备份,难免造成备份数据大量重复。这些重复的数据占用了大量的磁带空间,这对用户来说就意味着增加成本。其次,如果备份的数据量很大,那么备份所需的时间也就较长。对于一些业务繁忙、备份时间有限的企业来说,选择这种备份策略是不明智的。
(2)增量备份
增量备份是以上次备份为基准的备份方式,也就是只对每天新增的或被修改过的数据进行备份,例如,星期天进行一次完全备份,星期一备份从星期天到星期一之间增加的数据,星期二备份从星期一到星期二之间增加的数据,依次类推。
这种备份策略的优点是:只备份当天更新或者增加的数据,因而数据量小,节省了磁带空间,缩短了备份时间。当然,它也是有缺点的。当灾难发生时,数据的恢复过程比较麻烦。如果系统在星期五的早晨发生故障,丢失了大量的数据,那么现在就要将系统恢复到星期四时的状态。这时系统管理员首先要找到星期天的完全备份进行系统恢复,然后找到星期一的备份来恢复星期一的数据,接着找到星期二的备份来恢复星期二的数据。按照这种方式,直到恢复周四的数据为止,很明显,这种方式很繁琐。备份的可靠性也很差。在这种备份方式下,各个备份间的关系就像一个链子,环环相扣,其中任何一个备份出了问题都会导致整条链子脱节。在上例中,若星期三的备份出了故障,那么管理员最多只能将系统数据恢复到星期二时的状态。
(3)差异备份
差异备份是以完全备份为基准的一种备份方式。例如,系统管理员在星期天对系统进行一次完全备份,在星期一备份星期天到星期一之间的数据,在星期二备份星期天到星期二之间的数据,依次类推,也就是备份当天所有与星期天不同的数据(新的或修改过的)。
差异备份方式避免了上面两种备份策略的缺陷,同时,又具有以上两种备份方式的所有优点。首先,它无需每天都对系统做完全备份,因此备份数据量小,备份所需时间短,并节省空间;其次,它在灾难恢复时也很方便,只需要两个备份即可,即完全备份与灾难发生前一天的备份,就可以将系统恢复。
其实每种备份方式都不是孤立存在的,在实际的备份应用中,通常采用以上三种方式相结合的备份策略。例如每周一至周六进行一次增量备份或差异备份,每周日进行全备份,每月底进行一次完全备份,每年底进行一次完全备份。
通过对完三种备份方式的介绍,可以知道每种备份的数据量是不同的:完全备份>差分备份>增量备份。因而,在进行数据恢复时,使用的数据也不尽相同。如果使用完全备份的方式,只需要利用上次的完全备份就可以恢复所有数据;如果使用完全备份+增量备份的方式,则需要利用上次的完全备份+上次完全备份后的所有增量备份才能恢复所有数据;如果使用完全备份+差异备份的方式,则只需要利用上次的完全备份+最近的一个差异备份就可以恢复所有数据。

2.支持多种恢复方式
 可以恢复某个目录、文件到指定的位置,恢复时自动恢复数据的原始结构。
 可以恢复所有数据到指定位置,恢复时自动恢复数据的原始结构。
 可以保存恢复文件或目录的权限、属主、访问时间等属性。
 可以恢复某个时间点的备份到指定位置,恢复时自动恢复数据的原始结构。

3.支持多种文件系统下的备份与恢复
bacula支持的文件系统有:ext3、ext2、reiserfs、xfs、jfs、smbfs、 iso9660和ntfs等。

4.支持各种备份介质
 支持把备份写到磁盘
 支持把备份写到磁带
 支持把备份写到磁盘阵列
 支持把备份写到光盘

5.支持多种操作系统
 Linux(RHEL/SUSE/Centos)
 UNIX
 Mac
 Windows (Windows 98、 Windows Me、 Windows NT、Windows XP、Windows 2000和 Windows 2003)

6.强大的内部功能
 支持定时备份,无需人工干预
 支持终端命令控制,更加灵活
 支持正则表达式,可以对备份文件进行更严格的匹配
 支持MD5和SHA1两种签名校验
 支持压缩备份,备份效率更高,传输更快
 支持报表自动绘制功能,可以自动生成备份报表和恢复报表

四、bacula的工作原理

1.bacula基本组成
一个完整的bacula备份系统,由下面5个部分组成。
 Director Daemon:以下简称Director,负责监听所有的备份、恢复、验证、存档事务,以及定制备份和恢复文件计划等,并将整个系统运行状况记录在一个数据库中。支持Director Daemon的数据库有MySQL、PostgreSQL 和SQLite,推荐使用MySQL。Director的配置文件为bacula-dir.conf。
 Storage Daemon:以下简称SD,在备份数据时,用来指定备份和恢复数据的存储介质(存储介质可以是本地磁盘,光纤磁盘阵列、磁带和DVD等),主要负责将数据备份到存储介质上。而在数据恢复时,负责将数据从存储介质中传送出去。SD的配置文件为bacula-sd.conf。
 File Daemon:以下简称FD,是一个安装在需要备份数据的机器上的守护进程,在备份数据时,它负责把文件传出;在恢复数据时,它负责接收数据并执行恢复操作。FD的配置文件为bacula-fd.conf。
 Console:是一个管理控制台,用户可以通过这个控制台连接到Director Daemon进行管理备份与恢复操作,有三种管理方式:基于文本的控制台界面、 GNOME的界面和wxWidgets的图形界面。Console 端的配置文件是bconsole.conf。
Monitor:一个进程监控端,负责监控Director Daemon、Storage Daemon和File Daemon的守护进程。bacula备份系统的组成如图1所示。

CentOS7安装配置Bacula yum方法

图1 bacula备份系统的组成

从图1中可以看出,bacula的备份恢复流程如下:
首选,通过Console连接到Director端,备份恢复操作开始。
接着,Director端从自己的数据库中调出记录信息,对存储端SD与客户端FD的任务进行协调。
然后,客户端FD负责验证Director的操作许可,如果验证通过,则允许连接存储端SD。
最后,客户端FD根据Director发出的请求去连接SD,将FD端的数据备份到存SD指定的存储介质上,或者将SD端存储介质中的数据传回到客户端FD指定的位置上,完成备份恢复过程。
需要注意的是,在bacula的整个备份恢复系统中,客户端FD和SD要保证网络连接畅通,为了保证备份以及恢复数据的速度和效率,最好让客户端FD和SD处在一个网段中。

2.bacula各个组成部分的关联性
在baclua的5个组成部分中,3个主要配置文件是相互关联的,修改任何一个配置文件,另外两个文件都要进行相应的改动。为了使读者对这3个配置文件有更清晰的认识,图2列出了这3个文件之间的相互关系。

CentOS7安装配置Bacula yum方法

图2 bacula配置文件之间的关系

Bacula安装

根据要求:1、支持远程备份;2、支持完全、增量、压缩备份、差分备份。 决定先学习Bacula摘要:只使用1台主机,搭建bacula环境,实现服务器备份。安装环境 centos 7

   
 
           目 录
一、系统要求

1.1检查gccgcc-c++编译环境

1.2 检查mysql

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

关闭selinux

setenforce 0

# vim /etc/selinux/config

卸载旧版mysql

安装新mysql 5.7.23

SELINUX=disabled

getenforce

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.23-1.el7.x86_64.rpm-bundle.tar

mysql安装参照:通道

 进入mysql-设置root密码-修改密码复杂度-建立bacula账号-授权-flush privileges;-exit
设置初始root密码:
mysql>alter user root@localhost identified by '密码要求复杂度';
修改mysql密码复杂度:
mysql> show variables like'validate_password%';
mysql> show variables like'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec) mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
mysql> alter user root@localhost identified by 'aaa111';
Query OK, 0 rows affected (0.01 sec) mysql> create user bacula@localhost identified by 'bbb222';
Query OK, 0 rows affected (0.00 sec) mysql> create user bacula@'%' identified by 'bbb222';
Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on *.* to bacula@localhost;
Query OK, 0 rows affected (0.00 sec) mysql> grant all privileges on *.* to bacula@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
   Query OK, 0 rows affected (0.00 sec)

查看mysql全部用户: 

mysql>select user,host from mysql.user;

查看mysql库列表:

mysql>show databases;

进入库:

mysql>use 库名;

查看指定库中列表:

mysql>show tables;

查看指定用户权限:

mysql> show grants for bacula;

二 服务端安装bacula
2.1 安装bacula
2.2 创建mysql脚本
2.3 启动 bacula 进程
2.4 添加存储介质
三、客户端安装bacula
3.1 安装bacula
3.2 启动 bacula 的 fd 进程
一、系统要求
  安装和使用bacula需要gcc、gcc-c++、mysql的支持,安装前先确保已安装上述程序

1.1检查gccgcc-c++编译环境

#rpm -qa gcc gcc-c++

 yum install -y gcc gcc-c++

 1.2 检查mysql
    # rpm -qa mysql mysql-devel mysql-server

二 服务端安装bacula
  2.1 下载&安装bacula
在这个server上安装的bacula 具备了directory、storage、catalog.三个功能。

#  tar zxvf bacula-7.0.5.tar.gz
# cd bacula-7.0.5

./configure --prefix=/usr/local/bacula \
--sbindir=/usr/local/bacula/sbin\
--sysconfdir=/usr/local/bacula/etc \
--enable-smartalloc\
--with-working-dir=/usr/local/bacula/bin/working\
--with-subsys-dir=/usr/local/bacula/bin/working\
--with-pid-dir=/usr/local/bacula/bin/working \
--with-mysql

# make&&make install

#make install-autostart
这里指定了路径为/usr/local/bacula,默认情况下,bacula 的安装路径为/etc/bacula.

设置环境变量:

vim /etc/profile 在最后一行加入: export PATH=$PATH:/usr/local/bacula/sbin 保存退出:source /etc/profile

****************************************************
bacula目录结构:

[root@localhost home]# cd bacula/
[root@localhost bacula]# ls 
bin  etc  lib  sbin  share
[root@localhost bacula]# ls etc/
bacula           btraceback.gdb          grant_bacula_privileges
bacula_config    btraceback.mdb          grant_mysql_privileges
bacula-ctl-dir   create_bacula_database  make_bacula_tables
bacula-ctl-fd    create_mysql_database   make_catalog_backup
bacula-ctl-sd    delete_catalog_backup   make_catalog_backup.pl
bacula-dir.conf  disk-changer            make_mysql_tables
bacula-fd.conf   drop_bacula_database    mtx-changer
bacula-sd.conf   drop_bacula_tables      mtx-changer.conf
bconsole         drop_mysql_database     query.sql
bconsole.conf    drop_mysql_tables       update_bacula_tables
btraceback.dbx   dvd-handler             update_mysql_tables
[root@localhost bacula]#

*****************************************************************************************************

1.2 创建mysql脚本
 由于bacula的操作数据需要保存到数据库,所以要创建mysql数据库和相关的表。
# cd bacula/etc

#./grant_mysql_privileges

***********************************************
执行这一步可能遇到这个问题: ./grant_mysql_privileges 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Error creating privileges.

解决策略:
(1)在命令后面加上 -p密码
     ./grant_mysql_privileges  -proot
(2)用vi打开 grant_mysql_privileges文本,加入登录密码

if $bindir/mysql $* -u root -proot -f <<END-OF-DATA

#!/bin/sh
#
# shell script to grant privileges to the bacula database
#
# Copyright (C) 2000-2017 Kern Sibbald
# License: BSD 2-Clause; see file LICENSE-FOSS
#
db_user=${db_user:-bacula}
bindir=/usr/bin
db_name=${db_name:-bacula}
db_password=
if [ "$db_password" != "" ]; then
pass="identified by '$db_password'"
fi
db_ssl_options=
if [ "$db_ssl_options" != "" ]; then
ssl_options="require $db_ssl_options"
fi if $bindir/mysql $* -u root -p -f 2>/dev/null 1>/dev/null <<EOD
use mysql;
create user ${db_user} ${pass};
EOD
then
echo "Created MySQL database user: ${db_user}"
fi if $bindir/mysql $* -u root -p -f <<END-OF-DATA
use mysql
grant all privileges on ${db_name}.* to ${db_user}@localhost ${pass} ${ssl_options};
grant all privileges on ${db_name}.* to ${db_user}@"%" ${pass} ${ssl_options};
select * from user;
flush privileges;
END-OF-DATA
then
echo "Privileges for user ${db_user} granted on database ${db_name}."
exit 0
else
echo "Error creating privileges."
exit 1
fi

  

接下来的建库建表同上
***********************************************
#./ create_mysql_database
#./ make_mysql_tables

二、客户端安装bacula

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

检查gcc gcc-c++环境

rpm -qa | grep gcc*

安装gcc gcc-c++

yum install -y gcc gcc-c++
2.1 安装 bacula
该客户端bacula只作fd(被备份文件)。
# tar zxvf bacula-7.0.5.tar.gz
# cd bacula-7.0.5
# ./configure --enable-client-only   # 默认安装在/etc/bacula/目录下,也可以加--prefix=    指定安装路径
#make&&make install

bacula的配置文件有四个,分别对应主控端(bacula-dir.conf)、存储端(bacula-sd.conf)、客户端(bacula-fd.conf)、控制台(bconsole.conf)。
一、各配置文件之间的关系
组成 Bacula 备份系统有三个主要的部分,包括主控端、存储端和客户端,这三个部分都 有 各 自 的 配 置 文 件 , 相 对 应 的 是 主 控 端 ( bacula-dir.conf , 下 同 )、 存 储 端(bacula-sd.conf,下同)和客户端(bacula-fd.conf,下同),各配置文件中的部分项存在一定的关联,官方也用一张图形象的表示了它们之间的关系,看下图:
CentOS7安装配置Bacula yum方法
图中使用箭头连接主控端配置文件的相关项与其它配置文件的相关项,所连接的相关项的值必须是相同的。下面用文件说明一下:
  1. 主控端配置文件的 Director{}项。
Name 值与控制台配置文件(bconsole.conf,下同)的 Director{}项、存储端配置文件的 Director{}项及客户端配置文件的 Director{}项的 Name 值相同;Password 值与控制台配置文件的 Director{}项的 Password 值相同。
    2.     主控端配置文件的 Storage{}项。Device 值与存储端配置文件的 Device{}项的 Name 值相同;MediaType 值与存储端配置文件的 Device{}项的 MediaType 值相同;Password 值与存储端配置文件的 Director{}项的 Password 值相同。
    3.     主控端配置文件的 Client{}项。Password 值与客户端配置文件的 Director{}项的 Password 值相同。
理解了图中表示的意思,对配置 Bacula 非常有帮助。所以希望大家先熟悉此图之后再做配置。
二 主控端( bacula-dir.conf)文件配置
下图是主控端配置文件的主要选项。图中对其做了简单的介绍:
CentOS7安装配置Bacula yum方法
为什么 Job 项与其他选项用线连接呢?
因为在执行一个任务(Job)的过程中,需要调用到其他选项的参数设置,从而使得任务的完整。如果这么多的参数全部写在 Job 选项里,那么就会将导致 Job 选项的参数设置非常复杂,这样的模块化设计显得更直观,也能使程序运行更效高效。下面用一句话说明一下:
建立一个备份任务(Job)时,就需要选择一台备份的计算机(Client),然后确定需要备份的文件(FileSet)及备份时间周期和备份类型(Schedule),最后选择备份到哪里(Storage)以及文件存储的方式(Pool),让管理者知道备份任务的的情况(Messages)。
注意:Job 项也可以是还原任务。
Bacula Director 服务管理所有的备份,恢复,验证和存档事务,所以主控端的配置文件也是最为复杂的。下面结合实际使用的配置文件对文件中各选项的参数设置进行详细的介绍。

Director{
    Name = saas-dir                                               #指定主控端名称
    Password = "ConsolePassword"                    #设置主控端密码,控制台连接时需要使用。
    
    QueryFile = "/usr/local/bacula/etc/query.sql"             #指定执行sql脚本存放的路径
      WorkingDirectory = "/usr/local/bacula/bin/working"
      PidDirectory = "/usr/local/bacula/bin/working"                #指定进程 ID 文件存放目录,必选。一般在./configure 时已经指定
    Maximum Concurrent Jobs = 20                                   #设置同时执行的最大任务数量,默认设置为 1。

DirPort = 9101    #default 9101                                        #指定端口号监听控制台连接,默认是 9101。

#troggle
    MaximumConsoleConnections = 20  #指定控制台最大同时连接数,默认是 20。
    Messages = Daemon                          #引用 Messages{}的 Name 值

}

#JobDefs 选项允许所有可以出现在 Job 选项中的参数。但是,JobDefs 不会创建一个作业(Job),而是 Job{}引用它的参数设置。
JobDefs{
    
    Name ="DefaultJob"                   #指定 Job{}名称
    Type =Backup                             #Job 类型,定义备份作业或还原作业。取值有 Backup、Restore、Verify 和 Admin。
    #Level =Incremental      #备份类型,当 type 参数为备份作业时,取值有 Full、Incremental 和 Differential;还原作业不需要设置此选项;当 type 参数为 Verify 作业时,取值有 InitCatalog、Catalog、VolumeToCatalog 和 DiskToCatalog。

  Client =  saas-fd                   #引用 Client{}的 Name 值,也就是选择需要备份的客户端

Fileset =  "Full Set"            #引用 FlieSet{}的 Name 值,也就是选择客户端需要备份的目录及文件。
    Schedule = "schedule"     #引用 Schedule{}的 Name 值,设置作业执行的时间周期,可选。如果没有指定,此任务必须手动执行。
    Storage = saas-sd           #引用 Storage{}的 Name 值,选择执行 Job 时的存储端。
    Messages =Standard     #引用 Messages{}的 Name 值
    Pool = Default                #引用 Pool{}的 Name 值
    Write Bootstrap= "/usr/local/bacula/working/Client1.bsr"   #Type=Backup  当执行备份作业是,将作业记录写入到一个引导文件。此参数只用于Job 类型为Backup 时,此时必选。

}

Storage{
    
    Name = saas-sd                 
    Address =192.168.1.170 #storage Ip               #指定存储端的地址,可以是 IP 或者计算机名,如果选择计算机名,必须在/etc/hosts文件中加入解析条目,让系统能解析到此计算机名。必选。
    SD Port =9103                                                      #指定存储端的端口号,默认为 9103。
    Password = "StoragePassword"                         #指定存储端的密码

Device = FileStorage #指定存储的设备。引用存储端配置文件的 Device{}的 Name 值,必选。
    Media Type = File        #与存储端配置文件的 Device{}的 Media Type 值相同,必选

Maximum Concurrent Jobs = 20         #定义此存储端所允许同时进行的任务最大数量,默认为 1。
  
}

Schedule{
    
    Name = "schedule"
    Run = Level=Full daily at 11:20          #指定覆盖 Job{}默认参数的参数及执行作业的时间周期。具体语法规范见附件。
    Run = Level=Incremental daily at 11:25

}

#Fileset{}定义哪些文件需要备份或者哪些文件排除在备份任务中,定义一个Fileset{}是每个备份任务必须的。可定义一个文件或者目录清单,可将压缩、加密和签名各种备份方案应用到每个文件。
Fileset{
    Name = "Full Set"  
    Include{

        Options{
            compression=GZIP

signature = MD5
        }
        File = /root/桌面/备份用的test
    }
}

Client{
    
    Name= saas-fd
    Address = localhost   #client IP 指定客户端地址,可以是 IP 或者计算机名,如果选择计算机名,必须在/etc/hosts文件中加入解析条目,让系统能解析到此计算机名。必选。
    FDPort = 9102            #指定客户端的端口号,默认为 9102。
    Password = "ClientPassword"   #客户端的密码
    Catalog = MyCatalog      #引用 Catalog{}的 Name 值,为客户端调用。必选。
    Maximum Concurrent Jobs = 20
    
    
}

Catalog {   # 关于数据库的定义

Name = MyCatalog

  dbname = "bacula";        #指定数据库名称
  dbuser = "bacula";         #指定用户名,
  dbpassword = ""           #指定数据库密码

}

#完全备份
Job{
    
    Name = "FullBackup"
    Type=Backup
    Level=Full
    JobDefs="DefaultJob"   #引用 JobDefs{}的 Name 值。可选。

}

#增量备份
Job{

Name = "IncrementalBackup"
    Type=Backup                             #Job 类型,定义备份作业或还原作业。取值有 Backup、Restore、Verify 和 Admin。
    Level=Incremental                    #备份类型,当 type 参数为备份作业时,取值有 Full、Incremental 和 Differential;还原作业不需要设置此选项;当 type 参数为 Verify 作业时,取值有 InitCatalog、Catalog、VolumeToCatalog 和 DiskToCatalog。

    JobDefs="DefaultJob"          #引用 JobDefs{}的 Name 值。可选。

}

#差分备份
Job{
    
    Name = "DifferentialBackup"
    Type=Backup
    Level=Differential
    JobDefs="DefaultJob"
    Rerun Failed Levels = yes #当运行任务运行失败后一次备份作业时,将提升更高的备份类型,比如差异备份异常终止,下次备份将执行完全备份。默认为 no

}

#备份还原
Job{

Name="restore"
    Type= Restore
    Bootstrap =    "/usr/local/bacula/working/Restore1.bsr"  #指定引导文件,启动还原作业时自动创建。此参数只用于 Job 类型为 Restore 时,此时必选。 这个文件必须存在于电脑上,如果没有手动touch
    
    Pool = Default    
    Client =  saas-fd
    Fileset =  "Full Set"
    Messages =Standard
    Storage = saas-sd
    
    #Where = /root/桌面/备份用的test 
    
}

# Reasonable message delivery -- send most everything to email address
#  and to the console
Messages {
  Name = Standard

mailcommand = "/sbin/bsmtp -h localhost -f \"BaculaBacula \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/sbin/bsmtp -h localhost -f \"BaculaBacula \<%r\>\" -s \"Bacula: Intervention needed
for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved

append = "/usr/local/bacula/log/bacula.log" = all, !skipped
  catalog = all
}

#
# Message delivery for daemon messages (no job).
Messages {
 Name = Daemon
  mailcommand = "/sbin/bsmtp -h localhost -f \"BaculaBacula \<%r\>\" -s \"Bacula daemon message\" %r"
  mail = root@localhost = all, !skipped
  console = all, !skipped, !saved
  append = "/usr/local/bacula/log/bacula.log" = all, !skipped
}

# Default pool definition 
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # 是否重复使用 Volume
  AutoPrune = yes                     # 是否自动修剪

Volume Retention = 365 days         # Volume 保留时间,默认为 1 年

Maximum Volume Bytes = 50G          # 最大Volume(卷)的大小
  Maximum Volumes = 100               # Limit number of Volumes in Pool
}

#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
  Name = saas-mon                 #指定 Console{}名称,必选。
  Password = "MonitorPassword"              #指定 Console{}密码,必选。
  CommandACL = status, .status
}

三 、存储端配置文件详解

Storage{

Name = saas-sd            #指定 Storage{}名称,与主控端storage{}名称相同
      WorkingDirectory = "/usr/local/bacula/bin/working"           #指定工作目录,目录必须已经存在,必选。一般在./configure时已经指定。
      PidDirectory = "/usr/local/bacula/bin/working"      #指定进程 ID 文件存放目录,必选。一般在./configure 时已经指定。

SDPort =9103                 
    
    Maximum Concurrent Jobs = 20

}

Device {                           #定义Device

Name = FileStorage                #定义Device的名称,这个名称在Director端配置文件bacula-dir.conf中的Storage逻辑段Device项中被引用

Media Type = File                   #指定存储介质的类型,File表示使用文件系统存储

Archive Device = /tmp/backup     #Archive Device用来指定备份存储的介质,可以是cd、dvd、tap等,这里是将备份的文件保存的/tmp/backup目录下

LabelMedia = yes;           #通过Label命令来建立卷文件

Random Access = Yes;               #设置是否采用随机访问存储介质,这里选择yes

AutomaticMount = yes;               #表示当存储设备打开时,是否自动使用它,这选择yes

RemovableMedia = no;                #是否支持可移动的设备,如tap或cd,这里选择no

AlwaysOpen = no;                   #是否确保t设备总是可用

}

Director{

Name =saas-dir           #指定 Director{}名称,设置主控端 配 置 文 件 中 Director{} 的 Name 值
    Password="StoragePassword" #指 定 主 控 端 配 置 文 件Storage{}的 Password 值,必选。

}

#托盘监控相关设置
Director {
  Name = saas-mon   #指定 Director{}名称,设置托盘监控配置文件中 Monitor{}的Name 值,必选。
  Password = "MonitorPassword"
  Monitor = yes              #是否开启监控。默认值 no

}

Messages {            # 为存储端SD定义一个日志或消息处理机制
  Name = Standard
  director = saas-dir = all
}

四、客户端配置文件详解 (bacula-fd.conf)

Director {
  Name = saas-dir  # 与服务器上的bacula-dir.conf中一致

Password = "ClientPassword"  # 与服务器上的bacula-dir.conf文本中client定义的一致
}

Director {
  Name = saas-mon        # 与服务器上的bacula-dir.conf中一致
  Password = "MonitorPassword"  # 与服务器上的bacula-dir.conf中一致
  Monitor = yes
}

FileDaemon {                       
  Name = saas-fd      # 指自己,对应主控制器中client的Name

FDport = 9102                  # 监听端口r
  WorkingDirectory = /usr/local/bacula/bin/working
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}
Messages {
  Name = Standard
  director = Client-dir = all, !skipped, !restored
}

五、管理配置文件介绍(bconsole.conf)
Director {
  Name = saas-dir
  DIRport = 9101
  address = localhost          # 服务器位置
  Password = "ConsolePassword"  # 与bacula-dir.conf中director中一致
}

用如下命令验证各配置是否有问题:

bacula-dir -tc bacula-dir.conf

如果bacula-dir未安装,则先安装

yum search bacula-dir

[root@centos7-6 etc]# yum search bacula-dir
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.shu.edu.cn
* updates: mirrors.aliyun.com
================================================ N/S matched: bacula-dir ================================================
bacula-director.x86_64 : Bacula Director files Name and summary matches only, use "search all" for everything.

yum install -y bacula-director.x86_64

在安装和配置好了bacula后,我们就可以开始使用它来进行备份和还原操作。

一、开启主控端、存储端、客户端线程
   启动线程方式有两种,一种是执行bacula启动脚本(存在与bacula/etc目录下(安装时指定的)),另一种是执行bacula启动二进制文件(存在/bacula/sbin目录下)。建议使用第一种,原因是执行时终端可以看到执行过程。
1.1启动服务端线程(服务端装有主控端、存储端和控制台):

#./bacula-ctl-dir start
#./bacula-ctl-sd start

或(第二种)
 #./bacula-dir
#./bacula-sd
1.2 启动客户端线程
(按照我的文档,客户端存储路径在/etc/bacula(默认路径)下,找到对应的文件)。
#./bacula-ctl-fd start
#./bacula-fd
 查看9101 9102 9103端口是否启用
netstat -lnp | grep 91
[root@centos7-6 ~]# netstat -lnp | grep 91
tcp 0 0 192.168.10.106:9101 0.0.0.0:* LISTEN 10763/bacula-dir
tcp 0 0 0.0.0.0:9102 0.0.0.0:* LISTEN 10584/bacula-fd
tcp 0 0 0.0.0.0:9103 0.0.0.0:* LISTEN 10625/bacula-sd

如9101未启用,进mysql添加bacula用户并授权:

create user 'bacula'@'localhost' identified by 'bbb222';
create user 'bacula'@'%' identified by 'bbb222';
GRANT  ALL  ON  *.*  TO  ‘bacula’@‘%’;

flush privileges;
把bacula的密码,填入bconsole.conf 文件中bacula用户密码部分
二、Bconsole (bacula控制台)
Bconsole 是一个 shell 界面(TTY 风格)的控制台,允许用户在 Bacula 主控端守护进程运行时管理 Bacula。控制台也有两种方式进入,二进制和脚本,在对应目录下输入 # ./bacula
    在 Bconsole 中可以执行很多操作,如执行备份任务、还原任务、查看消息、查看任务状态等等,下面是所有可以执行的操作。

[root@localhost sbin]# ./bconsole 
Connecting to Director localhost:9101
1000 OK: 1 saas-dir Version: 7.0.5 (28 July 2014)
Enter a period to cancel a command.
*help
  Command       Description
  =======       ===========
  add           Add media to a pool
  autodisplay   Autodisplay console messages
  automount     Automount after label
  cancel        Cancel a job
  create        Create DB Pool from resource
  delete        Delete volume, pool or job
  disable       Disable a job, attributes batch process
  enable        Enable a job, attributes batch process
  estimate      Performs FileSet estimate, listing gives full listing
  exit          Terminate Bconsole session
  gui           Non-interactive gui mode
  help          Print help on specific command
  label         Label a tape
  list          List objects from catalog
  llist         Full or long list like list command
  messages      Display pending messages
  memory        Print current memory usage
  mount         Mount storage
  prune         Prune expired records from catalog
  purge         Purge records from catalog
  quit          Terminate Bconsole session
  query         Query catalog
  restore       Restore files
  relabel       Relabel a tape
  release       Release storage
  reload        Reload conf file
  run           Run a job
  status        Report status
  stop          Stop a job
  setdebug      Sets debug level
  setbandwidth  Sets bandwidth
  setip         Sets new client address -- if authorized
  show          Show resource records
  sqlquery      Use SQL to query catalog
  time          Print current time
  trace         Turn on/off trace to file
  truncate      Truncate one or more Volumes
  unmount       Unmount storage
  umount        Umount - for old-time Unix guys, see unmount
  update        Update volume, pool or stats
  use           Use catalog xxx
  var           Does variable expansion
  version       Print Director version
  wait          Wait until no jobs are running

When at a prompt, entering a period cancels the command.

三、备份还原演示
3.1. 备份 Job
 进入 bconsole 之后,输入 run 命令
[root@localhost sbin]# ./bconsole 
Connecting to Director localhost:9101
1000 OK: 1 saas-dir Version: 7.0.5 (28 July 2014)
Enter a period to cancel a command.
*run
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
     1: FullBackup
     2: IncrementalBackup
     3: DifferentialBackup
     4: restore
Select Job resource (1-4): 1
列表中的 Job 名对应的是 bacula-dir.conf 配置文件中的 Job{}中的 Name 值,这里选择1,回车
Select Job resource (1-4): 1
Run Backup job
JobName:  FullBackup
Level:    Full
Client:   saas-fd
FileSet:  Full Set
Pool:     Default (From Job resource)
Storage:  saas-sd (From Job resource)
When:     2015-07-02 13:49:03
Priority: 10
OK to run? (yes/mod/no): mod
系统会自动列出配置文件中的 FullBackup 已定义好的设定值,因为是实时执行 Job,该执行时间是当前时间,如果马上执行输入’yes’就可以了,如果要修改相关选项,需要输入’mod’,这里更改一下执行时间;
OK to run? (yes/mod/no): mod
Parameters to modify:
     1: Level
     2: Storage
     3: Job
     4: FileSet
     5: Client
     6: When
     7: Priority
     8: Pool
     9: Plugin Options
Select parameter to modify (1-9): 6
Please enter desired start time as YYYY-MM-DD HH:MM:SS (return for now): 2015-07-02 14:00:00
Run Backup job
JobName:  FullBackup
Level:    Full
Client:   saas-fd
FileSet:  Full Set
Pool:     Default (From Job resource)
Storage:  saas-sd (From Job resource)
When:     2015-07-02 14:00:00
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=80
*

已建立 Job,JobId 为 80。

3.2 查看 Job 状态
执行 status 命令(或st ) 查看任务状态,JobId 为 80;
*status
Status available for:
     1: Director
     2: Storage
     3: Client
     4: Scheduled
     5: All
Select daemon type for status (1-5): 5
saas-dir Version: 7.0.5 (28 July 2014) x86_64-unknown-linux-gnu redhat (Core)
Daemon started 02-7月015 10:11. Jobs: run=6, running=1 mode=0,0
 Heap: heap=393,216 smbytes=416,834 max_bytes=769,569 bufs=356 max_bufs=484

Scheduled Jobs:
Level          Type     Pri  Scheduled          Job Name           Volume
===================================================================================
Full           Backup    10  03-7月015 11:20   FullBackup         test10
Full           Backup    10  03-7月015 11:20   DifferentialBackup test10
Full           Backup    10  03-7月015 11:20   IncrementalBackup  test10
Incremental    Backup    10  03-7月015 11:25   FullBackup         test10
Incremental    Backup    10  03-7月015 11:25   IncrementalBackup  test10
Incremental    Backup    10  03-7月015 11:25   DifferentialBackup test10
====

Running Jobs:
Console connected at 02-7月015 13:57
 JobId  Type Level     Files     Bytes  Name              Status
======================================================================
    80  Back Full          0         0  FullBackup        is waiting for its start time (02-7月 14:00)
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
====================================================================
    65  Full          6    39.56 K  OK       01-7月015 19:47 FullBackup
    67                0         0   Cancel   01-7月015 20:24 restore
    71                6    39.56 K  OK       01-7月015 20:29 restore
    72                6    39.56 K  OK       01-7月015 20:32 restore
    74  Full          2    19.78 K  OK       02-7月015 11:37 FullBackup
    75  Full          2    19.78 K  OK       02-7月015 11:37 IncrementalBackup
    76  Full          2    19.78 K  OK       02-7月015 11:37 DifferentialBackup
    77  Incr          2    19.78 K  OK       02-7月015 11:37 FullBackup
    78  Incr          2    19.78 K  OK       02-7月015 11:37 IncrementalBackup
    79  Full          2    19.78 K  OK       02-7月015 11:37 DifferentialBackup

====
Connecting to Storage daemon saas-sd at 192.168.1.170:9103

saas-sd Version: 7.0.5 (28 July 2014) x86_64-unknown-linux-gnu redhat (Core)
Daemon started 02-7月015 11:37. Jobs: run=6, running=0.
 Heap: heap=135,168 smbytes=473,290 max_bytes=1,086,762 bufs=111 max_bufs=177
 Sizes: boffset_t=8 size_t=8 int32_t=4 int64_t=8 mode=0,0

Running Jobs:
No Jobs running.
====

Jobs waiting to reserve a drive:
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
===================================================================
    63                2    20.02 K  OK       01-7月015 16:28 restore
    65  Full          6    40.32 K  OK       01-7月015 19:47 FullBackup
    71                6    40.32 K  OK       01-7月015 20:29 restore
    72                6    40.32 K  OK       01-7月015 20:32 restore
    74  Full          2    20.02 K  OK       02-7月015 11:37 FullBackup
    75  Full          2    20.02 K  OK       02-7月015 11:37 IncrementalBackup
    76  Full          2    20.02 K  OK       02-7月015 11:37 DifferentialBackup
    77  Incr          2    20.02 K  OK       02-7月015 11:37 FullBackup
    78  Incr          2    20.02 K  OK       02-7月015 11:37 IncrementalBackup
    79  Full          2    20.02 K  OK       02-7月015 11:37 DifferentialBackup
====

Device status:

Device "FileStorage" (/tmp/backup) is not open.
==
====

Used Volume status:
====

====

Connecting to Client saas-fd at localhost:9102

saas-fd Version: 7.0.5 (28 July 2014)  x86_64-unknown-linux-gnu redhat (Core)
Daemon started 02-7月015 11:37. Jobs: run=6 running=0.
 Heap: heap=135,168 smbytes=588,233 max_bytes=886,066 bufs=86 max_bufs=153
 Sizes: boffset_t=8 size_t=8 debug=0 trace=0 mode=0,0 bwlimit=0kB/s

Running Jobs:
Director connected at: 02-7月015 13:57
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name 
===================================================================
    63                2    19.78 K  OK       01-7月015 16:28 restore
    65  Full          6    39.56 K  OK       01-7月015 19:47 FullBackup
    71                6    39.56 K  OK       01-7月015 20:29 restore
    72                6    39.56 K  OK       01-7月015 20:32 restore
    74  Full          2    19.78 K  OK       02-7月015 11:37 FullBackup
    75  Full          2    19.78 K  OK       02-7月015 11:37 IncrementalBackup
    76  Full          2    19.78 K  OK       02-7月015 11:37 DifferentialBackup
    77  Incr          2    19.78 K  OK       02-7月015 11:37 FullBackup
    78  Incr          2    19.78 K  OK       02-7月015 11:37 IncrementalBackup
    79  Full          2    19.78 K  OK       02-7月015 11:37 DifferentialBackup

3.3 查看 Job 执行详情
执行 messages 命令查看日志。注意当 Job 执行完成后,系统自动将信息显示在bconsole 控制台,如果信息已显示后,再次查看此任务信息,则需要查看 Bacula 日志文件(日志文件由bacula配置bacula-dir.conf中的Messages指定)

You have messages.
*messages
02-7月 14:00 saas-dir JobId 80: Start Backup JobId 80, Job=FullBackup.2015-07-02_13.53.30_12
02-7月 14:00 saas-dir JobId 80: Using Device "FileStorage" to write.
02-7月 14:00 saas-sd JobId 80: Volume "test10" previously written, moving to end of data.
02-7月 14:00 saas-sd JobId 80: Ready to append to end of Volume "test10" size=185,783
02-7月 14:00 saas-sd JobId 80: Elapsed time=00:00:10, Transfer rate=2.002 K Bytes/second
02-7月 14:00 saas-dir JobId 80: Bacula saas-dir 7.0.5 (28Jul14):
  Build OS:               x86_64-unknown-linux-gnu redhat (Core)
  JobId:                  80
  Job:                    FullBackup.2015-07-02_13.53.30_12
  Backup Level:           Full
  Client:                 "saas-fd" 7.0.5 (28Jul14) x86_64-unknown-linux-gnu,redhat,(Core)
  FileSet:                "Full Set" 2015-06-30 19:26:42
  Pool:                   "Default" (From Job resource)
  Catalog:                "MyCatalog" (From Client resource)
  Storage:                "saas-sd" (From Job resource)
  Scheduled time:         02-7月-2015 14:00:00
  Start time:             02-7月-2015 14:00:02
  End time:               02-7月-2015 14:00:13
  Elapsed time:           11 secs
  Priority:               10
  FD Files Written:       2
  SD Files Written:       2
  FD Bytes Written:       19,780 (19.78 KB)
  SD Bytes Written:       20,028 (20.02 KB)
  Rate:                   1.8 KB/s
  Software Compression:   None
  VSS:                    no
  Encryption:             no
  Accurate:               no
  Volume name(s):         test10
  Volume Session Id:      7
  Volume Session Time:    1435808229
  Last Volume Bytes:      206,249 (206.2 KB)
  Non-fatal FD errors:    0
  SD Errors:              0
  FD termination status:  OK
  SD termination status:  OK
  Termination:            Backup OK

02-7月 14:00 saas-dir JobId 80: Begin pruning Jobs older than 6 months .
02-7月 14:00 saas-dir JobId 80: No Jobs found to prune.
02-7月 14:00 saas-dir JobId 80: Begin pruning Files.
02-7月 14:00 saas-dir JobId 80: No Files found to prune.
02-7月 14:00 saas-dir JobId 80: End auto prune.

*
根据提示信息我们可以知道是否备份成功、文件保存到了哪个位置哪个文件。

3.4 还原Job
还原 Job 使用 run 和 restore 命令都可以执行,但是使用 run 命令执行一个还原 Job 时,还原的数据是该 Job 最近一次的备份;而 restore 命令执行还原很早的备份 Job,执行不同要求的还原 Job。
由于本地测试run执行还原未成功,所以run还原在此不做讲解,有兴趣的可以移步到附件《bacula_管理.pdf》第 2.2.4. 还原 Job 中学习。
 
restore 命令执行还原

*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"

First you select one or more JobIds that contain files
to be restored. You will be presented several methods
of specifying the JobIds. Then you will be allowed to
select which files from those JobIds are to be restored.

To select the JobIds, you have the following choices:
     1: List last 20 Jobs run            
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 5

这里列出了很多种还原方式,这里选择第 5 种,还原最近的一次备份。

You are now entering file selection mode where you add (mark) and
remove (unmark) files to be restored. No files are initially added, unless
you used the "all" keyword on the command line.
Enter "done" to leave this mode.

cwd is: /
$ mark *
2 files marked.
$ done

输入 JobId 后,系统提示进入’文件选择模式’,也就是说可以选择哪些文件需要还原’mark’,哪些文件不需要还原’unmark’,还原所有文件为’mark *’。输入’mark *’之后,输入’done’完成文件选择;

$ done

Bootstrap records written to /usr/local/bacula/bin/working/saas-dir.restore.1.bsr

The Job will require the following (*=>InChanger):
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
   
    test10                    saas-sd                   FileStorage

Volumes marked with "*" are in the Autochanger.

2 files selected to be restored.

Using Catalog "MyCatalog"
Run Restore job
JobName:         restore
Bootstrap:       /usr/local/bacula/bin/working/saas-dir.restore.1.bsr
Where:           *None*
Replace:         always
FileSet:         Full Set
Backup Client:   saas-fd
Restore Client:  saas-fd
Storage:         saas-sd
When:            2015-07-02 14:19:11
Catalog:         MyCatalog
Priority:        10
OK to run? (yes/mod/no): yes
Job queued. JobId=81

还原后,也可以通过messages查看是否还原成功。同样的也可以通过status命令查看。

远程客户端配置:
#
Director {
Name = zdy1.cluster.com-dir
Password = "cerU/APZwPP2zVSfrZuU+Y4osaZH5xrdEIwrpkCXqUMW"
#此密码和在服务器中(client172.conf)定义的客户端密码相同
} Director {
Name = zdy1.cluster.com-mon
Password = "qYhhy5PNCZTgW/nzE1JYiPRr+fBmUYR93uqLIyFNCDR1" #服务器zdy1中dir.conf中的第一个director密码
Monitor = yes
} FileDaemon { # this is me
Name = zdy2.cluster.com-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /usr/local/bacula/opt/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}

本地配置信息:

bacula-dir.conf

# Client (File Services) to backup
Client {
Name = centos7-7-fd
Address = 192.168.10.107
FDPort = 9102
Catalog = MyCatalog
Password = "IpDC19/nvcfwOMHK5Ijwonuj1YqOJsIOb1yi/MirGaz6" # password for FileDaemon
File Retention = 60 days # 60 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
} Job {
Name = "Backup-7-7"
Type = Backup
Client = centos7-7-fd
# Address = 192.168.10.107
JobDefs = "DefaultJob"
Level = Full
Job {
Name = "Backup-7-7"
Type = Backup
Client = centos7-7-fd
# Address = 192.168.10.107
JobDefs = "DefaultJob"
Level = Full
FileSet="Full Set"
Schedule = "WeeklyCycleAfterBackup"
Storage = File1
Messages = Standard
Pool = File # This creates an ASCII copy of the catalog
# Arguments to make_catalog_backup.pl are:
# make_catalog_backup.pl <catalog-name>
# RunBeforeJob = "/usr/local/bacula/etc/make_catalog_backup.pl MyCatalog"
# This deletes the copy of the catalog
# RunAfterJob = "/usr/local/bacula/etc/delete_catalog_backup" Write Bootstrap = "/opt/bacula/working/%n.bsr"
Priority = 11 # run after main backup
}
# # Standard Restore template, to be changed by Console program
# Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
Name = "RestoreFiles-7-7"
Type = Restore
Client=centos7-7-fd
Storage = File1
# The FileSet and Pool directives are not used by Restore Jobs
# but must not be removed
FileSet="Full Set"
Pool = File
Messages = Standard
# Where = /tmp/bacula-restores
Where = /bacula/restore/centos7-7-fd
}
#

远程客户端:bacula-fd.conf

# List Directors who are permitted to contact this File daemon
#
#Director {
# Name = centos7-7-dir
# Password = "FhvXq+VG53KfZD/OcebnbR+HI5IpH3yXSZPhoKsvzjTj"
# Password = "IpDC19/nvcfwOMHK5Ijwonuj1YqOJsIOb1yi/MirGaz6"
#} Director {
Name = centos7-6-dir
Password = "IpDC19/nvcfwOMHK5Ijwonuj1YqOJsIOb1yi/MirGaz6"
} #
# Restricted Director, used by tray-monitor to get the
# status of the file daemon
#
#Director {
# Name = centos7-7-mon
# Password = "w/9xNagm9iPLEa0hZnIajVXCWKfxpAatVpGT8L1y8HCs"
# Password = "5PvITI2xWIZKIb+aExPtQhyGoeB55YhjVU+Bx6IKB71u"
# Monitor = yes
#} Director {
Name = centos7-6-mon
Password = "5PvITI2xWIZKIb+aExPtQhyGoeB55YhjVU+Bx6IKB71u6"
Monitor = yes
} #
# "Global" File daemon configuration specifications
#
FileDaemon { # this is me
Name = centos7-7-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /opt/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
Plugin Directory = /usr/lib64
} # Send all messages except skipped files back to Director
Messages {
Name = Standard
director = centos7-7-dir = all, !skipped, !restored
}

  

1、下载webacula: http://osdn.jp/projects/sfnet_webacula/downloads/webacula/7.0.0/webacula-7.0.0.tar.gz/
   解压  #tar zxf webacula-7.0.0.tar.gz
2、安装 &&配置
 2.1 安装要求 
  2.1.1 Bacula 3.0 或以上版本 
  2.1.2 系统安装有 Mysql,PostgreSQL 或 SQlite 数据库 
  2.1.3 Zend Framework 1.8.3 或更高版本 
  2.1.4 PHP 5.2.4 或更高版本,并安装 php-gd、php-pdo、php-dom、php-xml、php-mysql 及 php-pgsql 包
如果安装php-mysql时报错:Require:libmysqlclient.so.18(libmysqlclient_18)(64bit)
安装兼容包解决rpm -ivh mysql-community-libs-compat-5.7.16-1.el7.x86_64.rpm
mysql打包文件中有以上文件 mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar

2.1.5  一个兼容性不错的浏览器

2.2 检查是否符合安装要求

#cd webacula-7.0.0 
#cd install/
# ./check_system_requirements.php
2.2.1 如果缺少2.1中 的安装条件,则可能会出现下面的错误信息
bash: ./check_system_requirements.php: /usr/bin/php: 坏的解释器: 没有那个文件或目录

没有安装php: yum install php

继续执行检查,显示:sh: psql: 未找到命令(有可能是别的如mysql、sqlite、php等)
没有安装postgreSQL
安装:centos7安装postgreSQL   http://www.cnblogs.com/tjpanda88/p/4306149.html
yum install http: //yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm
yum install postgresql94- server postgresql94 -contrib
2.2.2 再次检查是否符合安装要求
  # ./check_system_requirements.php

Webacula check System Requirements...

Current MySQL version = 5.6.25    OK
Current PostgreSQL version = 9.4.4    OK
Current Sqlite version = 3.7.17    OK

Current PHP version = 5.4.16    OK

php pdo installed.    OK
php gd installed.    OK
php xml installed.    OK
php dom installed.    OK

php pdo_mysql installed.    OK
php pdo_pgsql installed.    OK
php pdo_sqlite installed.    OK
php-dom, php-xml installed.    OK

 2.3 安装 ZendFramework,并拷贝文件
Download ZendFramework(http://framework.zend.com/download/latest) ,下载Zend Framework 1.12.13 Minimal
#tar zxf ZendFramework-1.11.10-minimal.tar.gz
#cd ZendFramework-1.11.10-minimal/library/
ZendFramework
 cp -R ZendFramework-1.12.13-minimal/library/ webacula-7.0.0/

然后将 webacula 目录拷贝到 apache的发布目录,并更名为webacula

cp -R webacula-7.0.0 /var/www/webacula

最终的目录结构是这样的:
CentOS7安装配置Bacula yum方法
2.4 编辑 webacula 的 config.ini 文件
 需要修改的内容如下(尤其注意红色部分)

#cd /var/www/webacula/application/
#vi config.ini 
db.adapter = PDO_MYSQL 
db.config.host = localhost 
db.config.username = root 
;;your database password 
db.config.password = "123456"  ;;这个密码是root的密码。
db.config.dbname = bacula 
bacula.sudo = "" 
bacula.bconsole = "/usr/local/bacula/sbin/bconsole"   ;; 这个路径的bconsole是二进制可执行文件,在bacula/etc下也有一个bconsole文件,那个是shell脚本。(这里必须用二进制文件)

[webacula] 
;db.adapter = PDO_MYSQL 
;db.config.host = localhost 
;db.config.username = wbuser 
;db.config.password = "wbpass" 
;;.....

2.4 添加 apache 用户权限
 Create system group account (if not yet created) :
#groupadd bacula
Add apache to group:
#usermod -aG bacula apache
[root@localhost application]# chown root:bacula /usr/local/bacula/sbin/bconsole  //这个路径的bconsole是二进制可执行文件,在bacula/etc下也有一个bconsole文件,那个是shell脚本。(这里必须用二进制文件)
[root@localhost application]# chmod u=rwx,g=rx,o= /usr/local/bacula/sbin/bacula

[root@localhost application]# chown root:bacula /usr/local/bacula/etc/bconsole.conf
[root@localhost application]# chmod u=rw,g=r,o= /usr/local/bacula/etc/bconsole.conf

2.5 设置 apache 发布 webacula
    在/etc/httpd/conf.d/ 目录下新建文件 webacula.conf,写入如下内容(注意里面的ip地址的设置)
CentOS7安装配置Bacula yum方法
2.6 编辑 php 配置文件
#vi /etc/php.ini
memory_limit = 32M 
max_execution_time = 3600
2.7 设置数据库连接设置及 WEB 登录用户名密码(root:123456)
[root@localhost conf.d]# cd /var/www/webacula/install/
[root@localhost install]# vi db.conf
# See also application/config.ini

# bacula settings 
db_name="bacula"      
# for Sqlite only 
db_name_sqlite="/usr/local/bacula/bin/working/bacula.db"

db_user="root"              #数据库root登陆 名

# !!! CHANGE_THIS !!! 
db_pwd=""                  #root密码

# Webacula web interface settings 

# Built-in superuser login is 'root' 

# !!! CHANGE_THIS !!!
# Use
#       ./password-to-hash.php <password>
# and insert the resulting hash below         #这个密码要先运行./password-to-hash.php <password> ,如 ./password-to-hash.php 123456 ,将结果写到这里。 
webacula_root_pwd="$P$BWMY1REK18VlkYh7jWqtSfj0uOrB561"          #加了盐,每次生成都不一样,不要直接复制这行到时候出现用户名密码错误。

~                                                                               
~                                                                               
"db.conf" 21L, 423C

2.8 执行 mysql 脚本

# cd /var/www/webacula/install/MySql/
#./10_make_tables.sh
#./20_acl_make_tables.sh

2.9 重启服务
#service mysqld restart 
#service httpd start
  重启bconsole服务
3、访问webacula
使用 root(pwd:123456)登录 Webacula,http://localhost/webacula/
CentOS7安装配置Bacula yum方法
当访问时apache错误日志(/etc/httpd/logs/error.log)可能会报一个:
 PHP Fatal error:  Uncaught exception 'Zend_Exception' with message 'Directory "/var/www/webacula/data/cache" is not exists or not writable.' in /var/www/webacula/html/index.php:203\nStack trace:\n#0 {main}\n  thrown in /var/www/webacula/html/index.php on line 203
可更改目录权限解决问题

#chmod 777 /var/www/webacula/data/cache

webacula运行遇到很多有关权限的问题,猜测是因为apache用户和root用户之间引起的,没去深究,直接给整个/var/www/webacula文件夹下所有文件赋777就好了。

用于管理的用户名和密码保存在mysql -->root用户--》bacula-->webacula_users
在windows下bacula一般只用来作备份客户端。
一、下载源程序包
    可在 Bacula 站点(http://www.bacula.org/)获取最新版本;
    也可在开源站点 Sourceforge 的 Bacula 项目中下载此程序安装包(Win32_64)。
    以下的下载链接 Bacula 客户端版本为 5.0.1
http://ncu.dl.sourceforge.net/project/bacula/Win32_64/5.0.1/win32bacul a-5.0.1.exe
二、安装
下面为安装操作过程贴图
Next>
I Agree
选择 Custom,Next>
其中 Bat Console 就是 Bacula 图形化管理工具 BAT(Bacula Admin Tool)。
Next>
Next>
注 意 “Password” 值 , 默 认 是 自 动 生 成 的 , 这 里 改 成 和 主 控 端 配 置 文 件
(bacula-dir.conf,下同)”Client”项“Password”的值一致。其他均为默认值(Name
值为计算机名-fd;Port 值为 9102,也就是客户端端口号;Max Jobs 值为 10。)。
Next>
输入主控端配置文件”Director”项相对应的相关值。详细介绍可查看 Bacula 配置部分。
注意”DIR Address”值为主控端计算机名或者 IP,如果填写的是计算机名,那么本机
的 hosts 文 件 一 定 能 解 析 到 , 也 就 是 在 Windows 系 统 的 hosts 文 件
(C:\Windows\System32\drivers\etc\hosts)中加入解析条目。格式如下:
# 编辑 C:\Windows\System32\drivers\etc\hosts
# 格式: IP 计算机名
# 以下是范例
192.168.160.129 ser1
192.168.160.131
redhat
192.168.160.1 sen-lenovo
可以用”ping 计算机名”命令测试一下网络是否可达。设置好后继续安装步骤:
点击 Install
保存配置文件范例。
Next>
Finish
到此,Bacula for Windows 7 系统的客户端就安装完成了,还需要对 Bacula 进行配置之后再启动 Bacula。配置 Bacula 可参考 Bacula 配置文档。
三、启动
当 Bacula 安装完成后,系统托盘会出现类似磁带形状的图标。中间那个图标就是 Bacula 托盘图标。双击可以查看 Bacula 工作状态。图标中间两个漏洞由白色两个漏洞将变成红色变成绿色,Bacula 开始保存文件;如果发生错误,。
如果任务栏没有发现托盘图标,"Bacula File Service"服务不能启动,有可能是配置文件
错误导致,可以使用-t 参数测试 Bacula 客户端配置文件是否正确及其他错误。
进入 Bacula 安装目录
# cd C:\Program Files\Bacula
# bacula-fd.exe -t bacula-fd.conf
如果各项参数配置没有问题,服务启动时发生 1067 错误,将 bacula-fd.conf 覆盖到
C:\ProgramData 目录下,然后尝试启动服务。

先决条件

您必须在CentOS 7服务器上具有超级用户(sudo)访问权限。此外,服务器将需要足够的磁盘空间用于计划在任何给定时间保留的所有备份。 如果你正在使用DigitalOcean,您应在Bacula的服务器上启用专用网络 ,以及所有在同一个数据中心的区域客户端服务器。这将允许您的服务器在执行备份时使用专用网络,从而减少网络开销。 我们将配置Bacula的使用我们的服务器,如私人FQDN bacula.private.example.com 。如果您没有DNS设置,请改用相应的IP地址。如果您没有启用专用网络,请将本教程中的所有网络连接信息替换为相关服务器可访问的网络地址(例如公共IP地址或VPN隧道)。 最后一个假设是SELinux被禁用,或者你能够自己解决SELinux相关的问题。 让我们先来看看Bacula的组件概述。

关闭selinux

临时关闭SELinux

setenforce 0

临时打开SELinux

setenforce 1

开机关闭SELinux

vi /etc/selinux/config
修改"SELINUX=disabled"为"SELINUX=disabled"

查看SELinux状态

getenforce

设置后需要重启才能生效

卸载并安装mysql

Bacula组件概述

虽然Bacula由几个软件组件组成,它遵循服务器 - 客户端备份模型;为了简化讨论,我们将集中更多的备份服务器 ,并比个人Bacula的组件备份客户端上。但是,重要的是要对各种Bacula组件有粗略的了解,所以我们现在将讨论它们。 一个Bacula的服务器 ,我们也称之为“备份服务器”,以下组件:

  • Bacula Director (DIR):软件控制的备份和恢复由该文件和存储守护程序执行的操作
  • Storage Daemon (SD):执行读取和用于备份的存储设备写入软件
  • Catalog:即维护备份文件的数据库服务。数据库存储在SQL数据库(如MySQL或PostgreSQL)中
  • Bacula Console:一个命令行界面,允许备份管理员进行交互和控制
Note: The Bacula server components don't need to run on the same server, but they all work together to provide the backup server functionality.

一个Bacula的客户端 ,也就是将要备份的服务器,运行文件守护程序(FD)的组成部分。文件守护程序是为Bacula服务器(特别是主任)提供对将要备份的数据的访问的软件。我们还将这些服务器称为“备份客户端”或“客户端”。 正如我们在介绍中指出的,我们将配置备份服务器以创建其自己的文件系统的备份。这意味着备份服务器也将是一个备份客户端,并将运行文件守护程序组件。 让我们开始安装。

server和client端解压bacula压缩包,cd bacula-5.2.13

server端执行./configure--prefix=/usr/local/bacula --with-mysql

client端执行./configure--prefix=/usr/local/bacula --enable-client-only

安装Bacula和MySQL

Bacula使用SQL数据库(如MySQL或PostreSQL)来管理其备份目录。在本教程中,我们将使用MariaDB,一个替代MySQL的插件。 使用yum安装Bacula和MariaDB服务器软件包:

sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server

安装完成后,我们需要使用以下命令启动MySQL:

sudo systemctl start mariadb

MySQL8.0后的命令和之前不一样!

新建bacula用户:

use mysql;

创建用户

CREATE USER 'bacula'@'localhost' IDENTIFIED WITH mysql_native_password BY 'baculadb';

create user bacula2@localhost identified by 'baculadb2';

修改密码

ALTER USER 'bacula'@'localhost' IDENTIFIED WITH mysql_native_password BY 'baculadb';

FLUSH PRIVILEGES;

给bacula用户授全权:切换到root用户后

grant all privileges on *.* to bacula@localhost;

flush privileges;

查看数据库列表

show databases;

查看用户状态

select host,user from mysql.user;

关闭防火墙:

//临时关闭 systemctl stop firewalld 
//禁止开机启动 systemctl disable firewalld

现在MySQL(MariaDB)已安装并运行,让我们使用这些脚本创建Bacula数据库用户和表:

/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database -u root -p
/usr/libexec/bacula/make_mysql_tables -u bacula -p

接下来,我们要运行一个简单的安全脚本,它将删除一些危险的默认值,并锁定对我们的数据库系统的访问一点。通过运行以下命令来启动交互式脚本:

sudo mysql_secure_installation

提示将要求您输入当前的root密码。因为你刚刚安装MySQL,你很可能不会有一个,所以留空,按enter键。然后提示将询问您是否要设置root密码。来吧,打Enter ,并设置密码。 对于剩余的问题,您应该简单地打Enter通过每个提示键接受默认值。这将删除一些示例用户和数据库,禁用远程根登录,并加载这些新规则,以便MySQL立即尊重我们所做的更改。 现在我们需要为Bacula数据库用户设置密码。 输入MySQL控制台,作为根MySQL用户:

mysql -u root -p

输入您刚刚设置的MySQL根密码,在提示符下。 现在设置Bacula数据库用户的密码。使用此命令,但替换突出了“Bacula的数据库密码”具有较强的密码:

UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula';
FLUSH PRIVILEGES;

一旦你完成这里,退出MySQL提示:

exit

启用MariaDB在启动时启动。使用以下命令:

sudo systemctl enable mariadb

设置Bacula使用MySQL库

默认情况下,Bacula设置为使用PostgreSQL库。因为我们使用MySQL,我们需要将其设置为使用MySQL库。 运行此命令:

sudo alternatives --config libbaccats.so

您将看到以下提示。输入1(MySQL):

OutputThere are 3 programs which provide 'libbaccats.so'.

  Selection    Command
-----------------------------------------------
1 /usr/lib64/libbaccats-mysql.so
2 /usr/lib64/libbaccats-sqlite3.so
*+ 3 /usr/lib64/libbaccats-postgresql.so Enter to keep the current selection[+], or type selection number: 1

Bacula服务器(和客户端)组件现在已安装。让我们创建备份和恢复目录。

创建备份和还原目录

Bacula的需要一个备份目录,用于存储备份存档和恢复目录,其中恢复的文件将被放置。如果系统有多个分区,请确保在具有足够空间的目录上创建目录。 让我们为这两个目的创建新目录:

sudo mkdir -p /bacula/backup /bacula/restore

我们需要更改文件权限,以便只有bacula进程(和超级用户)可以访问这些位置:

sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula

现在我们准备配置Bacula Director。

配置Bacula Director

Bacula有几个组件,必须独立配置才能正常工作。配置文件都可以在找到/etc/bacula目录中。 我们将从Bacula Director开始。 在您喜欢的文本编辑器中打开Bacula Director配置文件。我们将使用vi:

sudo vi /etc/bacula/bacula-dir.conf

配置Director资源

查找主任资源,并将其配置为监听127.0.0.1 (本地主机),加入DirAddress这里显示的一行:

bacula-dir.conf - 添加Director DirAddress
Director {                            # define myself
Name = bacula-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "@@DIR_PASSWORD@@" # Console password
Messages = Daemon
DirAddress = 127.0.0.1
}

现在移动到文件的其余部分。

配置本地作业

Bacula作业用于执行备份和恢复操作。作业资源定义特定作业将执行的操作的详细信息,包括客户端的名称,要备份或恢复的FileSet等。 在这里,我们将配置将用于执行本地文件系统备份的作业。 在Director配置,找到“BackupClient1”(搜索“BackupClient1”)的名称作业的资源。 的值更改Name为“BackupLocalFiles”,所以它看起来是这样的:

bacula-dir.conf - 重命名BackupClient1作业
Job {
Name = "BackupLocalFiles"
JobDefs = "DefaultJob"
}

接下来,找到名为“RestoreFiles”(搜索“RestoreFiles”)的工作资源。 在这个岗位上,你想改变两件事:更新的值, Name为“RestoreLocalFiles”,而价值Where ,以“/ Bacula的/恢复”。它应该看起来像这样:

bacula-dir.conf - 重命名RestoreFiles作业
Job {
Name = "RestoreLocalFiles"
Type = Restore
Client=BackupServer-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula/restore
}

此配置RestoreLocalFiles作业以还原文件/bacula/restore的目录中,我们前面创建。

配置文件集

一个文件集Bacula的定义了一组文件或目录包含排除备份选择的文件,并通过作业使用。 找到名为“完整集”的FileSet资源(它在注释说“#要备份的文件列表”)。在这里,我们将实现三个转变:(1)添加到使用gzip压缩我们的备份选项,(2)改变包括文件/usr/sbin/ ,和(3)添加File = /bacula下排除部分。删除评论后,应该看起来像这样:

bacula-dir.conf - 更新“完全设置”FileSet
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /
}
Exclude {
File = /var/lib/bacula
File = /proc
File = /tmp
File = /.journal
File = /.fsck
File = /bacula
}
}

让我们来看看我们对“完全集”FileSet所做的更改。首先,我们在创建备份存档时启用gzip压缩。第二,我们在包括/ ,即根分区,来进行备份。 第三,我们均不含/bacula ,因为我们不想冗余备份Bacula的我们的备份和恢复的文件。

Note: If you have partitions that are mounted within /, and you want to include those in the FileSet, you will need to include additional File records for each of them.

请记住,如果您始终在备份作业中使用广泛的文件集(例如“完整集”),则备份将需要比备份选择更具体的磁盘空间。例如,只包含自定义配置文件和数据库的FileSet可能足以满足您的需要,如果您有一个明确的恢复计划,详细安装所需的软件包,并将恢复的文件放置在正确的位置,而只使用一小部分备份存档的磁盘空间。

配置存储后台进程连接

在Bacula Director配置文件中,存储资源定义了Director应连接到的存储后台程序。我们将在稍后配置实际的存储守护程序。 查找存储资源,并更换地址,值localhost ,用你的备份服务器的FQDN私人(或私有IP地址)。它应该看起来像这样(替换突出显示的词):

bacula-dir.conf - 更新存储地址
Storage {
Name = File
# Do not use "localhost" here
Address = backup_server_private_FQDN # N.B. Use a fully qualified name here
SDPort = 9103
Password = "@@SD_PASSWORD@@"
Device = FileStorage
Media Type = File
}

这是必要的,因为我们将配置存储守护程序在专用网络接口上侦听,以便远程客户端可以连接到它。

配置目录连接

在Bacula Director配置文件中,Catalog资源定义了Director应该使用和连接到的数据库。 找到名为“MyCatalog”(这是一个评论,说:“通用目录服务”下),以及更新的价值目录资源dbpassword所以它匹配您的Bacula的 MySQL用户设置密码:

bacula-dir.conf - 更新目录dbpassword
# Generic catalog service
Catalog {
Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport =
dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password"
}

这将允许Bacula Director连接到MySQL数据库。

配置池

池资源定义了Bacula用于写入备份的存储集。我们将使用文件作为存储卷,我们将仅更新标签,以便我们的本地备份被正确标记。 找到名为“文件”的池资源(它在注释说“#文件池定义”),并添加一行指定标签格式。完成后应该看起来像这样:

bacula-dir.conf - 更新池:
# File Pool definition
Pool {
Name = File
Pool Type = Backup
Label Format = Local-
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Maximum Volume Bytes = 50G # Limit Volume size to something reasonable
Maximum Volumes = 100 # Limit number of Volumes in Pool
}

保存并退出。你终于完成了Bacula Director的配置。

检查引导程序配置:

让我们验证您的Director配置文件中没有语法错误:

sudo bacula-dir -tc /etc/bacula/bacula-dir.conf

如果没有错误信息,您bacula-dir.conf文件没有语法错误。 接下来,我们将配置存储后台程序。

配置存储后台进程

我们的Bacula服务器几乎已经设置好,但是我们仍然需要配置存储后台程序,因此Bacula知道在哪里存储备份。 在您喜欢的文本编辑器中打开SD配置。我们将使用vi:

sudo vi /etc/bacula/bacula-sd.conf

配置存储资源

查找存储资源。这定义了SD进程将侦听连接的位置。添加SDAddress参数,并将其分配给备份服务器的FQDN私人(或私有IP地址):

bacula-sd.conf - 更新SDAddress
Storage {                             # definition of myself
Name = BackupServer-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
SDAddress = backup_server_private_FQDN
}

配置存储设备

接下来,找到名为“FileStorage”(搜索“FileStorage”),设备资源,更新的价值Archive Device ,以配合您的备份目录:

bacula-sd.conf - 更新存档设备
Device {
Name = FileStorage
Media Type = File
Archive Device = /bacula/backup
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}

保存并退出。

验证存储后台进程配置

让我们验证您的存储后台程序配置文件中没有语法错误:

sudo bacula-sd -tc /etc/bacula/bacula-sd.conf

如果没有错误信息,您bacula-sd.conf文件中有没有语法错误。 我们已经完成了Bacula配置。我们准备重新启动Bacula服务器组件。

设置Bacula组件密码

每个Bacula组件(例如Director,SD和FD)都有用于组件间身份验证的密码 - 您在查看配置文件时可能会注意到占位符。可以手动设置这些密码,但是,因为你实际上不需要知道这些密码,我们将运行命令来生成随机密码并将它们插入到各种Bacula配置文件中。 这些命令生成并设置Director密码。该bconsole连接到处长,所以它需要的密码太:

DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf
sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf

这些命令生成并设置Storage Daemon密码。 Director连接到SD,所以它还需要密码:

SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf
sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf

这些命令生成并设置本地文件守护程序(Bacula客户端软件)密码。 Director连接到此FD,因此它还需要密码:

FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf
sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf

现在我们准备好开始我们的Bacula组件!

启动Bacula组件

使用以下命令启动Bacula Director,Storage Daemon和本地文件守护程序:

sudo systemctl start bacula-dir
sudo systemctl start bacula-sd
sudo systemctl start bacula-fd

如果它们都正确启动,请运行这些命令,使它们在启动时自动启动:

sudo systemctl enable bacula-dir
sudo systemctl enable bacula-sd
sudo systemctl enable bacula-fd

让我们通过运行备份作业来测试Bacula的工作原理。

测试备份作业

我们将使用Bacula控制台运行我们的第一个备份作业。如果它运行没有任何问题,我们将知道Bacula配置正确。 现在使用此命令输入控制台:

sudo bconsole

这将带您到Bacula的控制台提示,由记*提示。

创建标签

通过发出一个开始label的命令:

label

将提示您输入卷名称。输入任何您想要的名称:

Enter new Volume name:MyVolume

然后选择备份应使用的池。我们将使用我们之前配置的“文件”池,输入“2”:

Select the Pool (1-3):2

此处报错:

[root@centos7-3 bacula]# bconsole
Connecting to Director localhost:9101
1000 OK: bacula-dir Version: 5.2.13 (19 February 2013)
Enter a period to cancel a command.
*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
Automatically selected Storage: File
Enter new Volume name: myvolume
Defined Pools:
1: Default
2: File
3: Scratch
Select the Pool (1-3): 2
Connecting to Storage daemon File at 192.168.10.103:9103 ...
Failed to connect to Storage daemon.
Do not forget to mount the drive!!!
You have messages.
*messages
10-Aug 08:34 bacula-dir JobId 0: Fatal error: sql_get.c:1030 sql_get.c:1030 query SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger,EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId,Enabled,LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId,VolReadTime,VolWriteTime,ActionOnPurge FROM Media WHERE VolumeName='myvolume' failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:34 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=1 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:34 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=2 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:34 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=3 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:34 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=2 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:47 bacula-dir JobId 0: Fatal error: sql_get.c:1030 sql_get.c:1030 query SELECT MediaId,VolumeName,VolJobs,VolFiles,VolBlocks,VolBytes,VolMounts,VolErrors,VolWrites,MaxVolBytes,VolCapacityBytes,MediaType,VolStatus,PoolId,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,Recycle,Slot,FirstWritten,LastWritten,InChanger,EndFile,EndBlock,VolParts,LabelType,LabelDate,StorageId,Enabled,LocationId,RecycleCount,InitialWrite,ScratchPoolId,RecyclePoolId,VolReadTime,VolWriteTime,ActionOnPurge FROM Media WHERE VolumeName='myvolume' failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:47 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=1 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:47 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=2 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:47 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=3 failed:
Table 'bacula.Media' doesn't exist
10-Aug 08:47 bacula-dir JobId 0: Fatal error: sql.c:338 sql.c:338 query SELECT count(*) from Media WHERE PoolId=2 failed:
Table 'bacula.Media' doesn't exist
*

查看: vim /usr/libexec/bacula/make_mysql_tables

重新运行:/usr/libexec/bacula/make_mysql_tables结果好多表么有建出来

[root@centos7-3 bacula]# /usr/libexec/bacula/make_mysql_tables
Enter password:
ERROR 1050 (42S01) at line 7: Table 'Filename' already exists
ERROR 1050 (42S01) at line 14: Table 'Path' already exists
ERROR 1050 (42S01) at line 35: Table 'File' already exists
ERROR 1050 (42S01) at line 50: Table 'RestoreObject' already exists
ERROR 1050 (42S01) at line 76: Table 'MediaType' already exists
ERROR 1050 (42S01) at line 83: Table 'Storage' already exists
ERROR 1050 (42S01) at line 90: Table 'Device' already exists
ERROR 1067 (42000) at line 110: Invalid default value for 'SchedTime'
ERROR 1067 (42000) at line 143: Invalid default value for 'SchedTime'
ERROR 1050 (42S01) at line 175: Table 'Location' already exists
ERROR 1067 (42000) at line 183: Invalid default value for 'Date'
ERROR 1067 (42000) at line 197: Invalid default value for 'CreateTime'
ERROR 1050 (42S01) at line 205: Table 'JobMedia' already exists
ERROR 1067 (42000) at line 221: Invalid default value for 'FirstWritten'
ERROR 1050 (42S01) at line 270: Table 'Pool' already exists
ERROR 1050 (42S01) at line 301: Table 'Client' already exists
ERROR 1067 (42000) at line 312: Invalid default value for 'Time'
ERROR 1050 (42S01) at line 322: Table 'BaseFiles' already exists
ERROR 1061 (42000) at line 331: Duplicate key name 'basefiles_jobid_idx'
ERROR 1050 (42S01) at line 333: Table 'UnsavedFiles' already exists
ERROR 1050 (42S01) at line 343: Table 'Counters' already exists
ERROR 1050 (42S01) at line 352: Table 'CDImages' already exists
ERROR 1050 (42S01) at line 358: Table 'Status' already exists
ERROR 1062 (23000) at line 365: Duplicate entry 'C' for key 'PRIMARY'
ERROR 1050 (42S01) at line 388: Table 'PathHierarchy' already exists
ERROR 1061 (42000) at line 395: Duplicate key name 'pathhierarchy_ppathid'
ERROR 1050 (42S01) at line 398: Table 'PathVisibility' already exists
ERROR 1061 (42000) at line 406: Duplicate key name 'pathvisibility_jobid'
ERROR 1050 (42S01) at line 409: Table 'Version' already exists
Creation of Bacula MySQL tables succeeded.

  暂时无法解决,请大家指导!

手动运行备份作业

Bacula现在知道我们要如何为我们的备份写入数据。我们现在可以运行备份来测试它是否正常工作:

run

系统将提示您选择要运行的作业。我们要运行“BackupLocalFiles”作业,因此在提示符处输入“1”:

Select Job resource (1-3):1

在“运行备份作业”确认提示下,查看详细信息,然后输入“yes”运行作业:

yes

检查消息和状态

运行一个工作后,Bacula会告诉你你有消息。消息是通过运行作业生成的。 键入以下内容检查消息:

messages

消息应该说“找不到先前的完全备份作业记录”,并且备份作业已启动。如果有任何错误,有什么问题,他们应该给你一个提示,为什么工作没有运行。 另一种查看作业状态的方法是检查Director的状态。为此,请在bconsole提示符处输入此命令:

status director

如果一切正常,您应该看到您的作业正在运行。这样的东西:

Output — status director (Running Jobs)Running Jobs:
Console connected at 09-Apr-15 12:16
JobId Level Name Status
======================================================================
3 Full BackupLocalFiles.2015-04-09_12.31.41_06 is running
====

作业完成后,它将移动到状态报告的“终止的作业”部分,如下所示:

Output — status director (Terminated Jobs)Terminated Jobs:
JobId Level Files Bytes Status Finished Name
====================================================================
3 Full 161,124 877.5 M OK 09-Apr-15 12:34 BackupLocalFiles

“OK”状态表示备份作业没有任何问题。恭喜!您有Bacula服务器的“完整集”的备份。 下一步是测试还原作业。

测试恢复作业

现在已经创建了一个备份,重要的是检查它是否可以正确恢复。该restore命令将允许我们恢复已备份的文件。

运行还原所有作业

为了演示,我们将恢复上次备份中的所有文件:

restore all

将出现一个选择菜单,其中有许多不同的选项,用于标识要还原哪个备份集。由于我们只有一个备份,让我们选择最近的备份 - 选择选项5:

Select item (1-13):5

因为只有一个客户端,Bacula服务器,它会自动被选中。 下一个提示将询问您要使用哪个FileSet。选择“Full Set”,应为2:

Select FileSet resource (1-2):2

这将使您进入具有所备份的整个目录结构的虚拟文件树。这个类shell接口允许简单的命令来标记和取消标记要恢复的文件。 因为我们指定我们想要“还原所有”,每个备份的文件已经标记为还原。标记的文件是由领先的表示*字符。 如果要调整选择,可以使用“ls”和“cd”命令导航和列出文件,使用“mark”标记要恢复的文件,并取消标记具有“unmark”的文件。通过在控制台中输入“help”可以获得完整的命令列表。 完成恢复选择后,请键入以下内容继续:

done

确认要运行还原作业:

OK to run? (yes/mod/no):yes

检查消息和状态

与备份作业一样,应在运行还原作业后检查消息和Director状态。 键入以下内容检查消息:

messages

应该有一条消息表明还原作业已启动或已通过“恢复确定”状态终止。如果有任何错误,有什么问题,他们应该给你一个提示,为什么工作没有运行。 同样,检查Director状态是一个很好的方式来查看恢复作业的状态:

status director

当你与恢复完成后,键入exit离开Bacula的控制台:

exit

验证恢复

要验证还原作业实际还原选定的文件,你可以看看在/bacula/restore目录(这是在Director配置了“RestoreLocalFiles”的工作定义):

sudo ls -la /bacula/restore

您应该在根文件系统中看到已恢复的文件副本,但不包括在“RestoreLocalFiles”作业的“排除”部分中列出的文件和目录。如果您尝试从数据丢失中恢复,您可以将恢复的文件复制到其相应的位置。

删除已恢复的文件

您可能需要删除已恢复的文件以释放磁盘空间。为此,请使用以下命令:

sudo -u root bash -c "rm -rf /bacula/restore/*"

请注意,您必须先运行此rm命令,作为根,因为很多恢复的文件属于root。

结论

您现在有一个基本的Bacula设置,可以备份和恢复本地文件系统。下一步是将其他服务器添加为备份客户端,以便在数据丢失的情况下恢复它们。 接下来的教程将告诉你如何将其他远程服务器添加为客户Bacula的: 如何备份一个CentOS 7服务器与Bacula 。

bacula备份终端操作bconsole指令

1.list命令列出各种备份状态信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
list Jobs     #列出所有备份记录状态
list jobid=2  #列出jobid等于2有状态信息
list Job=t3_full       #列出Job名称等于t3_full的任务信息
list jobname=t3_full   #列出Job名称等于t3_full的任务信息
list joblog jobid=78   #列出jobid=78的详细备份日志信息
list jobmedia jobid=78 #列出jobid=78的状态信息与所在Volume信息
list files jobid=78    #列出jobid=78的状态信息与所备份的数据信息
list clients           #列出备份的客户端
list jobtotals         #列出所有作业任务使用的空间大小
list media pool=dbpool   #查看dbpool属性的media
list Volume Pool=dbpool  #查看dbpool属性的Volume
list pool    #查看定义的dbpool属性
llist pool   #查看定义的dbpool属性(更详细)

2.show查看配置信息

1
2
3
show Job=t3_full   #查看Job名称等于t3_full的配置信息
show pools         #查看池的信息
show pools=dbpool  #查看dbpool池的信息

3.status当着状态信息

1
2
status #查看状态信息
status client=t3-fd  #客户端名称t3-fd的状态信息

4.run执行job任务

1
2
run  #进入交互模式操作
run job=t3_full yes   #手动执行job为t3_full任务作业

5.delete删除备份

1
2
delete JobId=79  #删除jobid等于79的备份
list JobId=79    #查看就没有这个备份包了,但在status中还是会出这个,实际存储中空间并没有减小.

6.估算下这个备份有多少文件,需要多大容量.

1
2
estimate job=t3_full listing client=t3-fd  
#作业任务t3_full,客户端t3-fd

7.特殊的几个命令:

1
2
3
4
5
6
.jobs     #查看定义的job作业任务名称
.clients  #查看定义的客户端名称
.filesets #查看定义的备份资源FS的名称
.msgs     #查看定义的日志消息记录的名称
.pools    #查看定义的pool池属性名称
.storage  #查看定义的storage数据的存储方式的名称

8.在字符界面还可以直接这么来用:

1
printf "list clients\r\nquit" | /opt/bacula/sbin/bconsole