如何将WordPress网站备份到空间

本教程将介绍如何将WordPress数据备份到DigitalOcean Spaces。它涵盖了WordPress插件,使用S3cmd的手动备份和使用cron的自动化脚本。

介绍

DigitalOcean Spaces可以为WordPress网站数据提供对象存储解决方案。 这些数据通常是多种多样的,包括媒体资产和数据库文件,因此非常适合对象存储。 由于像Spaces这样的解决方案可以存储大量的非结构化数据,因此它们可以适应您网站的静态资产。 分开存储静态资产可以通过释放服务器上的空间和资源来优化站点性能。 如果您的站点具有动态资产 - 请求率较高的资源或需要频繁修改的数据库文件 - 您可以考虑将数据块存储解决方案与DigitalOcean Space配对,以最佳存储数据。 要了解更多对象和块存储,请参阅我们的关于对象存储与块存储服务的教程

在本教程中,我们将使用Spaces来备份WordPress数据。 由于DigitalOcean Spaces API可与AWS S3 API互操作,因此我们将能够使用S3兼容插件来管理我们的备份,以及S3cmd ,这是一款用于S3和S3兼容对象存储的客户端工具。 我们将介绍几种创建备份的不同方法:使用WordPress插件,使用S3cmd创建手动备份,以及使用S3cmd自动备份以及为此目的创建的脚本。

先决条件

本教程假设您在服务器上有一个WordPress实例以及DigitalOcean Space。 如果没有,您可以设置以下内容:

有了这些先决条件,我们可以开始将WordPress网站备份到Spaces。

修改WordPress权限

在本教程中,我们将使用WordPress项目中的wp-content/uploads文件夹,因此重要的是该文件夹存在且具有正确的权限。 您可以使用mkdir命令创建它,使用-p标志创建该文件夹(如果该文件不存在),并在发生错误时避免发生错误:

sudo mkdir -p /var/www/html/wp-content/uploads

您现在可以在文件夹上设置权限。 首先,将其所有权设置为您的用户(我们将在此处使用sammy ,但一定要使用您的非root用户sudo用户),并将所有权www-data组:

sudo chown -R sammy:www-data /var/www/html/wp-content/uploads

接下来,建立授予Web服务器对此文件夹写入权限的权限:

sudo chmod -R g+w /var/www/html/wp-content/uploads

我们现在可以使用插件为wp-content/uploads文件夹中的资产创建备份,并从WordPress界面与我们的资产进行交互。

使用插件创建备份

有许多S3兼容的插件可以用来将你的WordPress站点备份到你的空间。 评估插件时要考虑的一个因素是您是否想要备份数据库文件,因为其中一些资源不提供该功能。 另一个需要注意的因素是插件是否会从其他插件获取资源。 例如,如果您正在使用文档管理器,则可能需要考虑备份插件是否将捕获文档管理器在wp-content/uploads文件夹中创建的文件和资源。

使用WP-CLI安装插件

可以使用WP-CLI从命令行管理WordPress插件。 我们将在本节中安装它,并在下一节中使用它来演示如何使用插件将WordPress数据备份到空间。

要安装WP-CLI,我们将按照项目建议的步骤进行操作。 运行以下命令将二进制文件下载到您的tmp文件夹中:

cd /tmp
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

要从命令行使该文件可执行并可用,请键入以下内容:

chmod +x /tmp/wp-cli.phar

一旦我们使文件成为可执行文件,我们可以重命名它并将其移动到我们的PATH某个位置:

sudo mv /tmp/wp-cli.phar /usr/local/bin/wp

如果我们想检查我们的安装是否成功,我们可以运行以下命令:

wp --info

这会给我们关于我们正在使用的版本和路径的一般信息。

我们现在可以使用WP-CLI安装我们希望使用的插件,并管理与我们的WordPress网站相关的其他任务

安装和配置UpdraftPlus备份

如果您担心将数据库文件与其他媒体资产一起备份,则可能需要使用提供数据库备份选项的插件。 UpdraftPlus Backup提供S3兼容的免费版本,支持数据库和介质备份以及备份计划。

要安装UpdraftPlus,我们可以导航到我们的WordPress插件目录:

cd /var/www/html/wp-content/plugins

从这里,我们可以使用wp命令安装updraftplus

wp plugin install updraftplus

要激活插件,我们可以运行:

wp plugin activate updraftplus

从这里,我们可以导航到WordPress管理仪表板左侧的插件选项卡:

WordPress插件标签

通过选择已安装的插件 ,我们将到达一个列出我们安装的插件的页面。 我们应该在可用选项列表中看到UpdraftPlus - 备份/恢复

UpdraftPlus激活

要配置备份的设置,请导航到管理仪表板中的“设置”选项卡,然后从可用选项列表中选择UpdraftPlus备份 将有一个着陆屏幕,如下所示:

Updraft菜单

我们将介绍如何使用此插件进行基本的站点备份。 在页面顶部的“设置”选项卡下,您会看到一个菜单,可让您安排备份:

时间表菜单

如果您想测试该插件的工作原理,可以将此设置保留为手动 我们现在将保留此设置,以测试插件是否正常工作。

在此菜单下方,您将看到不同的远程存储选项。 选择S3兼容(通用)

S3兼容选项

选择此选项后,您将看到一个菜单,要求您提供DigitalOcean Space信息:

S3设置

根据您的Space的URL,您将能够确定其存储桶名称和端点。 例如,如果您的空间的URL是https:// example-name .nyc3.digitaloceanspaces.com ,则example-name将成为您的存储桶,并且nyc3.digitaloceanspaces.com将成为您的端点。 S3位置将成为您的存储桶名称, S3终点将成为您的端点。

在此之下,您可以找到要在备份中包含和排除文件的选项:

包括排除文件选项

填写完这些设置以反映您想要备份的内容后,即可导航回当前状态选项卡。 当您从屏幕顶部的可用按钮中选择立即备份时 ,您将看到以下菜单:

数据库菜单

在这里,您可以选择是否要备份数据库。

一旦你在这个菜单底部选择了立即备份选项,你的备份文件应该填充你的存储桶。 您可以导航到DigitalOcean控制面板中的Spaces页面,检查它们是否在那里。 一旦您测试了插件的功能,您可以修改备份计划设置以满足您的需求。

使用S3cmd备份WordPress

作为用于管理对象存储解决方案中数据的命令行工具,S3cmd提供了多种用于将WordPress数据备份到空间的选项。 它可以用于隔离的命令和脚本中,使备份过程自动化。

如果您的服务器上尚未安装s3cmd ,则可以按照本教程的“安装S3cmd”部分进行安装,并按照“配置S3cmd”一节中的空间信息对其进行配置

您现在应该安装s3cmd并配置Spaces信息。 您可以输入以下内容来验证s3cmd配置:

s3cmd --dump-config

你应该看到如下的输出:


[default]
access_key = Your_Spaces_Access_Key
access_token =
add_encoding_exts =
add_headers =
bucket_location = US
ca_certs_file =
cache_file =
check_ssl_certificate = True
check_ssl_hostname = True
cloudfront_host = cloudfront.amazonaws.com
default_mime_type = binary/octet-stream
delay_updates = False
delete_after = False
delete_after_fetch = False
delete_removed = False
dry_run = False
enable_multipart = True
encrypt = False

...

一旦我们检查了我们的s3cmd配置信息以确保它符合我们的空间凭证,我们将准备使用s3cmd将文件备份到我们的空间。 我们将首先手动执行此操作,然后再创建一个可以自动完成此工作的脚本。

创建wp-content/uploads文件夹的手动备份

要创建我们的wp-content/uploads文件夹的备份,我们将使用一个名为s3cmd sync的命令。 这将允许我们仅传输那些尚不存在于我们空间中的文件。 虽然这对于一次性转移可能并不重要,但当您将更多数据移动到您的空间时,它很快就会变得非常重要。 我们将使用sammys-bucket作为我们的存储桶, sammys-backups在我们的空间中指定一个备份文件夹,但是应该将其替换为存储桶和备份文件夹的名称(如果适用)。 为了确保我们的文件到达他们预期的目的地,我们将在--dry-run使用--dry-run选项,如下所示:

s3cmd sync --dry-run /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/

如果该命令的输出指示您的数据将到达其预期的目标位置,则可以继续运行该命令,而不使用--dry-run选项:

s3cmd sync /var/www/html/wp-content/uploads s3://sammys-bucket/sammys-backups/

创建MySQL数据库的手动备份

我们现在可以创建我们的MySQL数据库的手动备份。 这将发生在4个部分。 首先,我们可以在我们的主目录中创建一个文件夹来保存我们的数据库文件:

mkdir ~/mysqldmp

接下来,我们将创建一个文件来保存我们的数据库用户和密码信息。 这将帮助我们避免在创建备份文件的过程中将该信息传递到命令行。 MySQL的用户特定选项通常存储在~/.my.cnf ,因此我们将在主目录中创建该文件。 类型:

nano ~/.my.cnf

在文件内部,我们将为我们的MySQL客户端指定用户名和密码:

〜/ .my.cnf

[client]
user=mysql_user
password=mysql_password

通过输入CTRL+XY后保存该文件。

要限制对用户的读写权限,我们可以输入以下内容:

chmod 600 .my.cnf

现在,我们将能够运行mysqldump命令来创建数据库文件的副本,而无需将密码信息传递到命令行。 当我们运行mysqldump ,它会查找我们的.my.cnf文件作为读取默认选项的过程的一部分。 为了压缩我们数据库的输出,我们也可以使用gzip ,如下所示:

mysqldump mysqldatabase_name | gzip > ~/mysqldmp/mysql_dump.sql.gz

最后,我们可以使用s3cmd将压缩文件发送到我们的空间:

s3cmd sync mysqldmp/mysql_dump.sql.gz s3://sammys-bucket/sammys-backups/

您现在应该可以在Space中看到压缩的数据库文件。

使用Cron自动执行WordPress备份

自动备份将确保您的WordPress数据保持可访问和可恢复状态。 尽管可以手动创建备份,但这是一个非常耗时的过程,可以通过cron作业调度程序自动进行自动执行。 要了解有关使用cron计划任务的更多信息,请查看我们的关于如何使用Cron和Anacron在VPS上安排例行任务的教程。

要为备份脚本创建文件,我们可以使用以下命令:

nano ~/wp-sync.sh

在空文件中,我们将首先编写以下内容来指示此脚本将由Bash shell运行:

wp-sync.sh

#!/bin/bash

接下来,我们将声明变量来指定我们将备份哪些文件和数据库的信息。 我们的DATABASEUPLOADS_DIR变量将指定关于我们将备份的数据库和文件夹的信息。 我们将这些变量声明为数组,这将允许我们指定多个值:

wp-sync.sh
...
DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")

BACKUP_DIR=/home/sammy/mysqldmp

DATABASE变量指定mysqldump将备份的WordPress数据库或数据库的名称。 UPLOADS_DIR指向我们正在备份的一个或多个目录。 BACKUP_DIR告诉脚本mysqldump应该在哪里写备份文件。

接下来,我们将设置我们的s3cmd信息,包括Spaces存储桶信息。 这些信息将镜像我们的s3cmd配置文件中的s3桶信息。 当我们指定我们的S3_CMD变量时,我们将包含crons3cmd二进制文件的路径。 我们还将包含一个DATE变量,它允许我们为备份文件创建时间戳:

wp-sync.sh
...

DATE=$(date +%y%m%d-%H_%M_%S)


S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

在这里,我们使DATE变量非常精细,以捕捉年( %y ),月( %m ),日( %d ),小时( %H ),分钟( %M )和秒( %S )的备份。 根据备份时间表的频率,您可以通过一种可以有效跟踪备份的方式对其进行修改。 我们的S3_CMD变量将指向S3_CMD可执行文件,它将允许我们运行我们的命令。

接下来,我们将包含一组命令,这些命令将创建我们的mysqldmp目录(如果它尚不存在),并在更新过程中从该目录中删除任何文件:

wp-sync.sh
...

mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"

最后,我们将创建for循环为我们的数据库文件运行s3cmd sync 我们将再次使用mysqldump创建一个压缩的数据库文件,但我们将添加--defaults-extra-file选项,该选项告诉mysqldump读取.my.cnf以及标准选项文件。 我们还将遍历数据库数组,在每个数据库上执行相同的一组操作:

wp-sync.sh
...

for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done

mysqldumps3cmd sync命令的功能与上一节中的相同。 但是,因为我们将DATE变量的时间戳添加到了我们的存储桶中,所以我们的文件将在我们的空间中创建,让我们可以轻松跟踪它们的创建时间。

接下来,我们将为我们的目录创建一个循环。 再次,我们将遍历UPLOADS_DIR数组以在每个目录上执行相同的操作:

wp-sync.sh
...

for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done

同样, s3cmd sync命令与我们用来手动备份此目录的命令完全相同。 不同之处在于我们的空间中粘贴了此材质的时间戳。

完整的脚本将如下所示:

wp-sync.sh
#!/bin/bash

DATABASE=("mysqldatabase_name") # To add more than one database, separate values with spaces: ("database1" "database2")
UPLOADS_DIR=("/var/www/html/wp-content/uploads") # To add more than one directory, separate values with spaces: ("folder1" "folder2")

BACKUP_DIR=/home/sammy/mysqldmp

DATE=$(date +%y%m%d-%H_%M_%S)

S3_CMD="/usr/local/bin/s3cmd"
S3_BUCKET=s3://sammys-bucket/sammys-backups/$DATE/

mkdir -p $BACKUP_DIR
rm -rf "${BACKUP_DIR:?}/*"

for DB in "${DATABASE[@]}"
do
mysqldump --defaults-extra-file=/home/sammy/.my.cnf "$DB" | gzip > "$BACKUP_DIR/mysql_dump.sql.gz"
$S3_CMD sync "$BACKUP_DIR/mysql_dump.sql.gz" "$S3_BUCKET"
done

for DIR in "${UPLOADS_DIR[@]}"
do
$S3_CMD sync "$DIR" "$S3_BUCKET"
done

我们现在可以使我们的wp-sync.sh脚本可执行文件:

chmod +x ~/wp-sync.sh

为了测试它,我们可以运行:

sudo ~/wp-sync.sh

导航到您的空间,并确保您的文件按预期复制。 一旦你检查了这一点,你可以编辑crontab文件以期望的时间间隔运行脚本。

输入以下命令打开crontab文件:

crontab -e

如果这是您第一次编辑此文件,您将被要求选择一个编辑器:

crontab中
no crontab for root - using an empty one
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny
Choose 1-4 [2]: 
...

您可以为nano选择2 ,或输入与您选择的编辑器相对应的编号。

在文件底部,我们将添加一行来指定脚本应该运行的频率。 为了测试我们的脚本的功能,我们可以将我们的时间间隔设置为两分钟,如下所示:

crontab中
...

*/2 * * * * /home/sammy/wp-sync.sh

两分钟后,您应该在您的Space中看到一个带时间戳的文件。 您现在可以修改crontab文件以指定您希望用于备份的时间间隔。

结论

我们介绍了几种可以将WordPress数据备份到DigitalOcean的Spaces对象存储服务的方法。

要了解有关使用s3cmd和Spaces的更多信息,请查看我们的指南,配置s3cmd 2x以管理DigitalOcean Spaces以及使用s3cmd管理DigitalOcean Spaces的教程。 您还可以查看我们的关于如何使用DigitalOcean Spaces自动备份以及如何将 DigitalOcean Spaces备份到DigitalOcean Spaces的教程, 获取更多自动化脚本和备份选项的示例。 最后,有关优化空间使用方式的更多信息,请查看DigitalOcean空间上的最佳性能实践