介绍
获得您的应用程序服务器并运行后,一个重要的下一步是设置备份系统. 备份系统将允许您创建数据的定期备份副本,并从这些备份中恢复数据. 由于数据可能因用户错误或任何计算机系统可能出现的硬件故障而丢失,您将希望设置备份作为安全网。
此教程将演示您如何创建 PHP 应用程序的适当备份, 通过使用运行 Bacula 的单独备份服务器, 在单一 Ubuntu 14.04 服务器上运行 LAMP 堆栈 。 使用类似Bacula的备份系统的好处之一是它能让你完全控制应该备份和恢复的东西,在单个文件级别,以及何时创建备份的时间表. 在创建备份时拥有文件级的颗粒性,可以让我们将备份选择限制在仅需要的文件上,相对于备份整个文件系统,这将节省磁盘空间.
如果您觉得这过分, 您可以考虑 [数字 Ocean Dropplet 备份] ([ LINK0]) (您整个 Dropplet 的 snapshot 备份), 当您创建 Dropplet 时必须启用 。 这些备份很容易设置,如果只需要每周备份,可能足以满足您的需要. 如果您选择 DigitalOcean 备份, 请遵循您的数据库部分的 Create Hot 备份, 请确定设置您的数据库的热备份 —— 这对于确保您的数据库备份的一致性( 可用) 是必要的 .
前提条件
本教程假定你正在运行一个PHP应用程序,如WordPress,在一个Ubuntu 14.04服务器上运行LAMP(Linux,Apache,MySQL/MariaDB和PHP)堆栈,允许私人网络。
如果你正在运行不同的PHP应用程序,或者使用 Nginx而不是Apache,这个教程仍然会很好,假设你对你的备份选择做任何必要的调整。
当然,您将需要 sudo 访问的服务器上将安装 Bacula 服务器软件,我们将称之为 备份 服务器. 理想情况下,它将位于与您的 LAMP 服务器相同的数据中心,并启用私人网络。
备份选择
正如介绍中提到的,我们的备份选择 - 每次创建备份时都会复制的文件 - 只包括恢复应用程序到以前状态所必需的文件。
PHP 应用文件: 这将是您的 Web 服务器的 DocumentRoot. 在 Ubuntu 上,这将是默认的 /var/www/html
* MySQL 数据库:* 虽然 MySQL 数据文件通常存储在 /var/lib/mysql
,我们必须在另一个位置创建数据库的热备份。
为了方便,我们还会将Apache和MySQL配置文件列入我们的备份选择中,如果您有其他重要的文件,如SSL密钥和证书文件,请确保也包括这些文件。
在服务器上的其他文件可以通过遵循初始安装的软件安装步骤来更换,在服务器故障的情况下,我们可以通过遵循前提教程来创建替换LAMP服务器,然后恢复备份,并重新启动相应的服务。
如果您不确定为什么我们在备份选项中包括上述文件,请查看多部分 Building for Production: Web Applications 教程系列的 Recovery Planning部分。
让我们设置我们的数据库的热备份。
创建数据库的热备份
要确保我们对我们的活跃数据库产生一致的(即可用)备份,必须特别小心。
安装 Percona XtraBackup
在您的 LAMP 服务器上,安装和配置Percona XtraBackup,按照本教程: 如何在Ubuntu 14.04上使用Percona XtraBackup创建MySQL数据库的热备份。
创建 XtraBackup 脚本
Percona XtraBackup已准备好创建您的MySQL数据库的热备份,最终将由Bacula(或DigitalOcean备份)备份,但热备份必须以某种方式安排。
创建一个名为 run_extra_backup.sh
的 bash 脚本在 /usr/local/bin
中:
1sudo vi /usr/local/bin/run_xtrabackup.sh
请确保用您安装 XtraBackup 时所设置的任何内容替换用户和密码:
1[label /usr/local/bin/run_xtrabackup.sh]
2#!/bin/bash
3
4# pre xtrabackup
5chown -R mysql: /var/lib/mysql
6find /var/lib/mysql -type d -exec chmod 770 "{}" \;
7
8# delete existing full backup
9rm -r /data/backups/full
10
11# xtrabackup create backup
12innobackupex --user=bkpuser --password=bkppassword --no-timestamp /data/backups/full
13
14# xtrabackup prepare backup
15innobackupex --apply-log /data/backups/full
储出出. 运行此脚本( 具有超级用户权限) 将删除) 部分.
使脚本可执行:
1sudo chmod +x /usr/local/bin/run_xtrabackup.sh
为了正确地备份我们的数据库,我们必须运行(并完成)XtraBackup脚本之前,Bacula试图备份数据库. 一个好的解决方案是配置您的Bacula备份工作,以运行脚本为)保持简单。
创建 cron 配置文件(在 `/etc/cron.d 中添加到 root 的 crontab 中的文件):
1sudo vi /etc/cron.d/xtrabackup
添加以下 cron 工作:
1[label /etc/cron.d/xtrabackup]
230 22 * * * root /usr/local/bin/run_xtrabackup.sh
这会安排脚本每天在10点30分(第22小时,第30分钟)开始运行,我们选择了这个时间,因为Bacula的默认备份工作计划每天在11点05分运行,我们将在稍后讨论如何调整。
现在数据库热备份已设置,让我们在我们的备份服务器上安装Bacula。
在备份服务器上安装 Bacula
在您的 备份 服务器上,通过以下教程设置Bacula服务器: 如何在Ubuntu 14.04上安装Bacula服务器。
然后按照本教程的 Organize Bacula Director Configuration (Server) 部分: How To Back Up a Ubuntu 14.04 Server with Bacula。 在设置 Bacula 客户端时,您将需要管理员名称(您想要备份的服务器上)。
请注意,我们将使用RemoteFile池为我们将设置的所有备份工作。
在 LAMP 服务器上安装 Bacula Client
在您的 LAMP 服务器上,按照本教程的** 安装和配置Bacula客户端** 部分安装Bacula客户端: 如何使用Bacula备份Ubuntu 14.04服务器。
请注意,您将需要 FileDaemon 名称 (通常是附有)和** Director 密码** (Bacula 服务器将使用的密码连接到 Bacula 客户端)从 LAMP 服务器上的 bacula-fd.conf
文件。
将备份客户端添加到备份服务器
在您的 备份 服务器上,Bacula 服务器,将 LAMP 服务器的** 客户端资源** 添加到 /etc/bacula/conf.d/clients.conf
文件中。
打开clients.conf
文件:
1sudo vi /etc/bacula/conf.d/clients.conf
LAMP 服务器的客户端资源定义应该看起来像以下代码块,请注意, Name 的值应与** FileDaemon** 的资源名称匹配,而** Password** 应与 LAMP 服务器上的** Director** 的资源密码匹配,这些值可以在 LAMP 服务器上的 `/etc/bacula/bacula-fd.conf 中找到:
1[label clients.conf — Example Client resource definition]
2Client {
3 Name = lamp-fd
4 Address = lamp_private_IP_or_hostname
5 FDPort = 9102
6 Catalog = MyCatalog
7 Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46" # password for Remote FileDaemon
8 File Retention = 30 days # 30 days
9 Job Retention = 6 months # six months
10 AutoPrune = yes # Prune expired Jobs/Files
11}
这将配置Bacula Director,在 backups 服务器上,可以连接到每个服务器上的Bacula客户端。
有关本节的更多细节可以在 [如何备份 Ubuntu 服务器使用 Bacula 教程] 中找到 安装和配置 Bacula 客户端 (https://andsky.com/tech/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula# install-and-configure-bacula-client)。
现在让我们配置 Bacula 备份 FileSets。
配置 Bacula FileSets
Bacula 将创建与将执行的备份工作相关联的 FileSets 中指定的文件的备份。本节将涵盖创建 FileSets,其中包括我们早些时候确定为我们的 备份选择 的一部分的文件。有关添加 FileSets 到 Bacula 的更多细节可以在 Bacula 教程的 添加 FileSets (服务器) 部分找到。
在您的 备份 服务器上,打开filesets.conf
文件:
1sudo vi /etc/bacula/conf.d/filesets.conf
根据我们的备份选择,我们LAMP服务器所需的备份包括:
PHP 應用程式檔案: /var/www/html
* MySQL 資料庫:* /data/backups/full
- 我們的 XtraBackup 脚本每天在 10:30 pm 建立完整的熱備份
我们还将包括以下文件,为了方便:
MySQL配置: /etc/mysql
* Apache配置:* /etc/apache2
** XtraBackup脚本:* /usr/local/bin/run_xtrabackup.sh
** XtraBackup cron 文件:* /etc/cron.d/xtrabackup
考虑到我们的备份选择,我们将为我们的 Bacula 配置添加以下 FileSet:
1[label filesets.conf — MySQL Database]
2FileSet {
3 Name = "LAMP Files"
4 Include {
5 Options {
6 signature = MD5
7 compression = GZIP
8 }
9 File = /var/www/html
10 File = /data/backups
11 File = /etc/mysql
12 File = /etc/apache2
13 File = /usr/local/bin/run_xtrabackup.sh
14 File = /etc/cron.d/xtrabackup
15 }
16 Exclude {
17 File = /data/backups/exclude
18 }
19}
请注意,所有突出的 文件 指令都位于 ** 包含** 区块中. 这些都是我们想要备份的所有文件. 如果您想从备份工作中排除任何文件,那些存在于包含的目录中,请将其添加到 ** 排除** 区块中。
现在我们的 FileSet 已配置,让我们继续创建使用此 FileSet 的 Bacula 备份任务。
创建Bacula备份工作
我们将创建 Bacula 备份工作,运行并创建我们的 LAMP 服务器的备份。
在 /etc/bacula/conf.d 中创建一个
jobs.conf` 文件:
1sudo vi /etc/bacula/conf.d/jobs.conf
LAMP服务器备份工作
对于我们的LAMP服务器备份工作,我们将创建一个名为)和FileSet (LAMP 文件):
1[label jobs.conf — Backup db1]
2Job {
3 Name = "Backup LAMP"
4 JobDefs = "DefaultJob"
5 Client = lamp-fd
6 Pool = RemoteFile
7 FileSet="LAMP Files"
8}
保存和退出。
现在我们的备份工作已配置,最后一步是重新启动 Bacula 管理器。
重新启动 Bacula 导演
在 备份 服务器上,重新启动 Bacula 管理器,以使我们的所有更改生效:
1sudo service bacula-director restart
此时,您将想要测试您的客户端连接和备份任务,这两个任务都包含在 [How To Back Up a Server with Bacula reductional] (https://andsky.com/tech/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula# test-client-connection). 该教程还包括如何恢复Bacula备份. 注意恢复 MySQL 数据库需要您遵循 Percona XtraBackup 教程中的 [Perform Backup Reference] (https://andsky.com/tech/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14-04 perform-backup-restoration) 步骤 .
查看备份时间表
Bacula 备份时间表可以通过修改 Bacula 主管配置(/etc/bacula/bacula-dir.conf
)进行调整。我们创建的备份任务使用DefaultJob
JobDef,该任务使用WeeklyCycle
时间表,定义为:
- 每月第一个星期日上午11点05分的完整备份 * 所有其他周日上午11点05分的差异备份 * 其他日子增加备份,从周一到周六,上午11点05分
您可以通过使用 Bacula 控制台来验证管理员的状态来验证这一点,它应该输出您的所有日程安排的工作:
1[secondary_label Director Status — Scheduled Jobs]
2Scheduled Jobs:
3Level Type Pri Scheduled Name Volume
4===================================================================================
5Incremental Backup 10 20-May-15 23:05 BackupLocalFiles MyVolume
6Incremental Backup 10 20-May-15 23:05 Backup lamp Remote-0002
您可以随意添加或调整任何备份工作的时间安排 。 如果你希望你的备份更灵活一些,那么谨慎的做法是将数据库备份与其他所有内容分开. 这样,您可以修改应用程序文件备份工作的时间安排,以便在Percona XtraBackup脚本执行时同时发生(10:30pm),并在数据库的热备份(由XtraBackup制作)完成准备后备份. 这将减少应用程序和数据库备份相互不一致的可能性.
设置远程备份(可选)
如果你愿意,你可以创建一个远程服务器,将存储你的Bacula备份的副本. 这个远程服务器应该在一个地理上独立的区域,所以你将有你的关键备份的副本,即使在你的生产数据中心有灾难. 例如,如果你的LAMP和备份服务器位于纽约,你可以使用DigitalOcean的旧金山(SFO1)区域为你的服务器 remotebackups 。
我们将解释一个简单的方法,将我们的备份从我们的 备份 服务器发送到我们的** 远程备份** 服务器使用公共SSH密钥,rsync和cron。
在 remotebackups 服务器上, 创建用户将用于rsync登录。
然后,在 backups 服务器上,作为 root 生成一个无密码的 SSH 密钥对。 安装您刚刚创建的** remotebackups** 用户上的公共密钥。 这是我们在 How To Set Up SSH Keys 教程中涵盖的。
在 backups 服务器上,写一个 rsync 命令,将 Bacula 备份数据(/bacula/backup
)复制到** remotebackups** 服务器上的某个地方。 Rsync 使用方法涵盖在我们的 如何使用 Rsync 教程。
1rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup
将命令添加到脚本中,例如 /usr/local/bin/rsync_backups.sh
,并使其可执行。
最后,你会想设置一个 cron 工作,运行 rsync_backups.sh
脚本作为根,后 Bacula 备份工作通常完成. 这是在我们的 如何安排常规任务与 Cron 教程。
设置所有这些后,请确保第二天在 remotebackups 服务器上有您的备份副本。
查看备份磁盘要求
我们没有谈论您的备份的磁盘要求,您肯定会想要审查您的备份使用的磁盘空间,并根据您的需求和资源修改您的设置和备份时间表。
在我们的例子中,除非您的PHP应用程序具有相当高的内容和媒体量,否则备份可能会消耗相对较少的磁盘空间,这是因为我们的备份选择非常保守,并且默认的备份工作在可能时会创建 增量 备份。
结论
您现在应该每天备份,并(如果您设置它)远程复制这些备份,您的 LAMP 服务器. 确保您能够通过快速运行恢复过程来恢复备份的文件。