专栏首页云计算教程系列如何在Ubuntu 14.04上使用Bacula备份LAMP服务器
原创

如何在Ubuntu 14.04上使用Bacula备份LAMP服务器

介绍

启动并运行应用程序服务器后,下一个重要步骤就是设置备份系统。备份系统允许您创建数据的定期备份副本,并从这些备份中还原数据。由于用户错误或任何计算机系统容易出现的终端硬件故障导致数据丢失,您需要将备份设置为安全网。

本教程将向您展示如何通过使用运行Bacula的单独备份服务器,在单个Ubuntu 14.04服务器上运行LAMP堆栈来创建正确的PHP应用程序备份。使用像Bacula这样的备份系统的一个好处是,它可以让您完全控制应在单个文件级别备份和还原的内容,以及应该创建备份的时间表。在创建备份时具有文件级粒度允许我们将备份选择限制为仅需要的文件,与备份整个文件系统相比,这将节省磁盘空间。

如果您的文件太多,您可能需要考虑用快照创建云硬盘,快照是腾讯云提供的一种数据备份方式,通过对指定云硬盘进行完全可用的拷贝,使该备份独立于云硬盘的生命周期。快照不占据用户的存储空间,腾讯云将以冗余的方式把用户创建的快照存储在多个可用区,从而进一步确保了备份的可靠性。

准备

本教程假设您正在运行一个PHP应用程序,例如WordPress,它运行在单个Ubuntu 14.04服务器上的LAMP(Linux,Apache,MySQL / MariaDB和PHP)堆栈上,并启用了专用网络。我们将此称为LAMP服务器。要完成本教程,你需要具备以下内容:

  • 一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器
  • 安装Linux,Apache,MySQL,PHP(LAMP)堆栈,若您还未安装,您可以在腾讯云+社区找到很多相关专栏文章进行学习和安装。
  • 通过以下教程创建WordPress服务器:如何使用WP-CLI安装Wordpress

如果您正在运行不同的PHP应用程序,或者使用Nginx而不是Apache,假设您还想对备份选择进行必要的调整,本教程仍然可以适用。

当然,您需要sudo访问将安装Bacula服务器软件,我们将其称为备份服务器。理想情况下,它将与您的LAMP服务器位于同一数据中心,并启用了专用网络。创建的备份将存在于此服务器上,因此需要足够的磁盘空间来存储备份选择的多个副本。

备份选择

如介绍中所述,选择每次创建备份时需要备份的文件,将仅包含将应用程序还原到先前状态所必需的文件。简而言之,这意味着我们将备份以下数据:

  • PHP应用程序文件:这将是您的Web服务器的文档根目录。在Ubuntu上,默认是在/var/www/html下。
  • MySQL数据库:虽然MySQL数据文件通常存储在/var/lib/mysql中,但我们必须在另一个位置创建数据库的热备份。热备份将成为我们备份选择的一部分。

为方便起见,我们还将在备份选择中包含Apache和MySQL配置文件。如果您有任何其他重要文件,例如SSL密钥和证书文件,请务必也包含这些文件。

SSL证书:如何设置此证书取决于你是否拥有可解析该服务器的域名。

可以按照初始设置的软件安装步骤替换服务器上的其余文件。在服务器发生故障的情况下,我们可以通过遵循准备中的教程,然后恢复备份并重新启动相应的服务来创建替换LAMP服务器。

接下里,让我们设置数据库的热备份。

创建数据库的热备份

为确保我们为活动数据库生成一致(即可用)备份,必须特别小心。使用MySQL创建热备份的一种简单有效的方法是使用Percona XtraBackup。

安装Percona XtraBackup

LAMP服务器上,参考相关教程安装和配置Percona XtraBackup,到达“ 执行完全热备份”部分时停止。

创建XtraBackup脚本

Percona XtraBackup已准备好创建MySQL数据库的热备份,最终将由Bacula备份,但必须以某种方式安排热备份。我们将设置最简单的解决方案:bash脚本和cron作业。

/usr/local/bin下创建一个名为run_extra_backup.sh的bash脚本:

sudo vi /usr/local/bin/run_xtrabackup.sh

添加以下脚本。确保用安装XtraBackup时设置的内容替换用户和密码:

#!/bin/bash
​
# pre xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;
​
# delete existing full backup
rm -r /data/backups/full
​
# xtrabackup create backup
innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/full
​
# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full

保存并退出。运行此脚本(具有超级用户权限)将删除/data/backups/full下现有的XtraBackup备份并创建新的完整备份。简而言之,此脚本将维护数据库热备份的单个副本。

使脚本可执行:

sudo chmod +x /usr/local/bin/run_xtrabackup.sh

为了正确备份我们的数据库,我们必须在Bacula尝试备份数据库之前运行(并完成)XtraBackup脚本。一个好的解决方案是配置您的Bacula备份作业以将脚本作为“预备份脚本”运行,但我们可选择使用cron更简单。

创建一个cron配置文件(将/etc/cron.d下的文件添加到根目录的crontab中):

sudo vi /etc/cron.d/xtrabackup

添加以下cron进程:

30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh

这会以root身份将脚本安排为每天晚上10:30运行(第22小时,第30分钟)。我们选择这个时间段是因为Bacula的默认备份工作计划在每天晚上11:05运行 - 我们将在稍后讨论调整此问题。这需要35分钟完成XtraBackup脚本。

现在已经设置了数据库热备份,让我们在备份服务器上安装Bacula。

在备份服务器上安装Bacula

设置Bacula服务器。

组织Bacula Director配置(服务器)。

请注意,我们将使用RemoteFile池来处理我们将要设置的所有备份作业。话虽如此,您可能希望在继续之前更改某些设置。

在LAMP服务器上安装Bacula Client

安装Bacula客户端。

请注意,您需要从LAMP服务器上的bacula-fd.conf文件中获取FileDaemon名称(通常是“-fd”附加的主机名)和Director密码(Bacula服务器将用于连接Bacula客户端的密码)。

将备份客户端添加到备份服务器

备份服务器Bacula上,将LAMP服务器的客户端资源添加到/etc/bacula/conf.d/clients.conf文件中。

打开clients.conf文件:

sudo vi /etc/bacula/conf.d/clients.conf

LAMP服务器的客户端资源定义应类似于以下代码块。请注意,Name的值应与FileDaemon资源的名称匹配,密码应与LAMP服务器上Director资源的密码匹配- 这些值可在LAMP服务器的/etc/bacula/bacula-fd.conf文件中找到:

Client {
  Name = lamp-fd
  Address = lamp_private_IP_or_hostname
  FDPort = 9102
  Catalog = MyCatalog
  Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46"          # password for Remote FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

保存并退出。这将配置备份服务器上的Bacula Director,以便能够连接到每台服务器上的Bacula客户端。

现在让我们配置Bacula备份文件集。

配置Bacula FileSet

Bacula将在FileSets中创建指定文件的备份,这些文件与将要执行的备份进程相关联。本节将介绍如何创建包含我们之前确定为备份选择一部分的文件的文件

备份服务器上,打开filesets.conf文件:

sudo vi /etc/bacula/conf.d/filesets.conf

根据我们的备份选择,我们的LAMP服务器所需的备份包括:

  • PHP应用程序文件: /var/www/html
  • MySQL数据库: /data/backups/full - 我们的XtraBackup脚本每天晚上10:30创建完整的热备份

为方便起见,我们还将包含以下文件:

  • MySQL配置: /etc/mysql
  • Apache配置: /etc/apache2
  • XtraBackup脚本: /usr/local/bin/run_xtrabackup.sh
  • XtraBackup cron文件: /etc/cron.d/xtrabackup

考虑到我们的备份选择,我们将以下FileSet添加到Bacula配置中:

FileSet {
  Name = "LAMP Files"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /var/www/html
    File = /data/backups
    File = /etc/mysql
    File = /etc/apache2    
    File = /usr/local/bin/run_xtrabackup.sh
    File = /etc/cron.d/xtrabackup
  }
  Exclude {
    File = /data/backups/exclude
  }
}

保存并退出。请注意,所有突出显示的File指令都在Include块中。这些是我们要备份的所有文件。如果要从备份作业中排除任何文件(包含目录中存在的文件),请将它们添加到“ 排除”块。

现在我们的FileSet已配置完毕。让我们继续创建将使用此FileSet的Bacula备份作业。

创建Bacula备份作业

我们将创建Bacula备份作业,该作业将运行并创建LAMP服务器的备份。

/etc/bacula/conf.d位置创建jobs.conf文件:

sudo vi /etc/bacula/conf.d/jobs.conf

LAMP服务器备份作业

对于我们的LAMP服务器备份作业,我们将创建一个名为“Backup LAMP”的新作业。这里重要的是我们指定正确的客户端(lamp-fd)和FileSet(LAMP文件):

Job {
  Name = "Backup LAMP"
  JobDefs = "DefaultJob"
  Client = lamp-fd
  Pool = RemoteFile
  FileSet="LAMP Files"
}

保存并退出。

现在我们的备份作业已配置。最后一步是重新启动Bacula Director。

重启Bacula Director

备份服务器上,重新启动Bacula Director以使我们的所有更改生效:

sudo service bacula-director restart

此时,您将需要测试客户端连接和备份作业,请注意,恢复MySQL数据库将要求您遵循Percona XtraBackup教程中的步骤。

修改备份计划

可以通过修改Bacula Director配置(/etc/bacula/bacula-dir.conf)来调整Bacula备份计划。我们创建的备份作业使用“DefaultJob”JobDef,它使用“WeeklyCycle”计划,其定义为:

  • 完全备份:在一个月的第一个星期日晚上11:05
  • 差异备份:所有其他星期日晚上11:05
  • 其他日期的增量备份:周一至周六,晚上11:05

您可以使用Bacula控制台检查Director的状态来验证这一点。它应该输出所有预定的作业:

Director Status — Scheduled JobsScheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Incremental    Backup    10  20-May-15 23:05    BackupLocalFiles   MyVolume
Incremental    Backup    10  20-May-15 23:05    Backup lamp         Remote-0002

您可以随意添加或调整任何备份作业的计划。如果您希望备份更灵活,您可以将数据库备份与其他所有备份分开。您可以修改应用程序文件备份作业的计划,这样以便在执行Percona XtraBackup脚本时(晚上10:30)同时进行,并完成正在准备的备份数据库的热备份(由XtraBackup生成)。这将减少应用程序和数据库备份彼此不一致的可能性。

设置远程备份(可选)

如果您愿意,可以创建一个远程服务器来存储Bacula备份的副本。此远程服务器应位于独立地理位置的区域,因此即使生产数据中心发生灾难,您也将拥有关键备份的副本。

我们将解析一种公共SSH密钥,使用rsync和cron 将备份从备份服务器发送到remotebackups服务器的简单方法。

remotebackups服务器上,创建将用于rsync登录的用户。

接下来,在备份服务器上,以root身份生成无密码SSH密钥对。在刚刚创建的remotebackups用户上安装公钥。这在我们的如何设置SSH密钥教程中有所介绍。

备份服务器上,编写一个rsync命令,将Bacula备份数据(/bacula/backup)复制到remotebackups服务器上的某个位置。我们的如何使用Rsync教程中介绍了Rsync的用法。该命令可能看起来像这样:

rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup

将命令添加到脚本,例如/usr/local/bin/rsync_backups.sh并使其可执行。

最后,在Bacula备份作业通常完成之后,您将需要以root身份使用cron作业运行rsync_backups.sh脚本。

设置完所有内容后,请确认第二天在remotebackups服务器上有备份副本。

查看备份磁盘要求

我们没有谈论备份的磁盘要求。您肯定希望查看备份使用的磁盘空间,并根据您的需求和资源修改设置和备份计划。

在这个教程中,除非您的PHP应用程序具有大量的内容和媒体,否则备份只会占用相对较少的磁盘空间。这是因为我们的备份选择非常保守,默认备份作业会尽可能创建增量备份。

结论

您现在应该有每日备份,并且(如果您设置了)LAMP服务器的那些备份的远程副本。确保通过快速运行还原过程来验证是否能够还原备份的文件。

想要了解更多关于备份的开源信息教程,请前往腾讯云+社区学习更多知识。

参考文献:《How to Back Up a LAMP Server with Bacula on Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 16.04上设置Node.js生产应用程序

    Node.js是一个开源JavaScript运行时环境,用于轻松构建服务器端和网络应用程序。该平台可在Linux,OS X,FreeBSD和Windows上运行...

    小皇帝James
  • 如何在Ubuntu 16.04上安装Nginx

    Nginx是世界上最受欢迎的网络服务器之一,负责托管互联网上一些规模最大,流量最高的网站。在大多数情况下,它比Apache更加资源友好,可以用作Web服务器或反...

    小皇帝James
  • 如何在CentOS上创建Sudo用户[快速入门]

    该sudo命令提供了一种机制,用于向普通用户授予通常仅对root用户可用的管理员权限。本教程将向您展示在CentOS上创建具有sudo访问权限的新用户的最简单方...

    小皇帝James
  • 混合云备份机制实现成本节约的七种方式

    自然灾害对于数据内容的影响绝不仅仅像好莱坞大片中所描述或者说美化出来的那样。事实上,网络攻击、人为失误、暴雪、飓风乃至其它一些常见的突发性事件往往会令大家的业务...

    静一
  • WordPress数据库备份插件WP-DB-Backup使用教程详解

    wordpress的优势是开源,支持各种插件主题,最大的缺点就是吃主机性能,所以一些博主选择了zblog建站。人各有志,我还是喜欢Wordpress,毕竟wor...

    JunyouYH
  • MySQL备份恢复体系(一)

    说到备份恢复,不管你对心理学是否感兴趣,建议你要理解下墨菲定律:如果事情有变坏的可能,不管这种可能性有多小,它总会发生。

    jeanron100
  • 【OCP最新题库解析(052)--题32】The ORCL database has CONTROL FILE AU

    RMAN> BACKUP INCREMENTAL LEVEL 0 DATABASE;

    小麦苗DBA宝典
  • 运维的福利,黑客的噩梦

    CYWL_Team服务器防御工具1.0 0x01开发前言 很多小黑都希望搭建自己的博客,论坛,来记录自己在安全之路上面的点点滴滴,不过总是被一些大牛来进行恶搞,...

    用户1467662
  • [MySQL]给MySQL的备份账户添加权限

    但是备份的时候又是不可以直接使用最高权限的用户去备份的。那么我们需要独立一个只有备份权限的账户去备份,那么我们该用什么权限呢?

    用户2353021
  • 服务器操作规范(初稿)

    禁用目录浏览,敏感文件数据禁止放在web目录下面(包括svn,cvs版本控制的文件)

    IMWeb前端团队

扫码关注云+社区

领取腾讯云代金券