WordPress 在数据库中存储了大量的重要的内容。你可能知道你的实际内容存储在数据库中:博客文章、页面、自定义文章类型、评论等等。
但数据库存储的不仅仅是内容。更多。仅举几例
- 插件设置
- 主题设置
- 小部件和侧边栏内容
- 布局和模板(如果你使用的是高级拖放主题)
- Cron 计划
- 用户帐户
- 菜单
天哪 - 你不能丢失这些东西!无论你的网站是大是小,是上线还是在开发中 - 备份适用于每个 WordPress 网站。
如果你是一名 WordPress 设计师或开发人员,想想你为保存你编写的 PHP、HTML 或 CSS 代码付出了多少努力。你可能使用版本控制。至少,你不会依赖于单个代码副本 - 那太冒险了!因此,让我们对更重要的数据库也采取同样的谨慎态度。
WordPress 数据库备份 可以通过多种方式进行,从“高度技术性”到“极其简单”。你进行备份的方式(以及备份频率)将取决于你正在处理的网站的重要性。
让我们逐步了解一些可以备份 WordPress 数据库的方法。
如何使用 mysqldump 进行备份
使用命令行进行备份是一个手动过程,如果你不熟悉命令行,可能会有点令人望而生畏。但即使你害怕 shell,使用mysqldump
进行备份也并不太难。如果你不熟悉它,请跳到下一节,了解如何使用 phpMyAdmin 进行备份。
- 推荐用于:开发和非关键网站
- 难度:有点难
- 成本:免费
mysqldump
是一个恰如其分地命名为用于转储 MySQL 数据库的程序。这里没有惊喜。
使用默认设置,mysqldump
将生成一个 .sql 文件,它只是一个 SQL 命令列表 - CREATE TABLE、INSERT 等等。
如果你要运行mysqldump
生成的 .sql 文件中的每个 SQL 命令,你最终将获得 WordPress 数据库的精确副本 - 这正是我们想要得到的!
要运行mysqldump
,你需要访问服务器的命令行。
ssh [email protected]
一些软件可以帮助你通过 SSH 连接到你的服务器。这是Coda中该设置屏幕。

要运行mysqldump
,你需要准备一些东西
- 你要备份的数据库的名称
- 具有访问该数据库权限的数据库用户
- 该用户的密码
如果你不记得这些,可以参考 WordPress 网站的wp-config.php
文件。配置值将如下所示
/** The name of the database for WordPress */
define('DB_NAME', 'my_db_name');
/** MySQL database username */
define('DB_USER', 'my_db_user');
/** MySQL database password */
define('DB_PASSWORD', 'my_db_password');
有了我们的数据库信息,我们就可以运行mysqldump
命令,如下所示
mysqldump -u my_db_user -p my_db_name > /path/to/save/backup_file.sql
如果你不熟悉命令行术语,“以连字符开头的字母”称为“标志”。标志为命令行实用程序(在本例中为mysqldump
)提供它需要正确运行的答案。
-u
标志告诉mysqldump
使用my_db_user
来备份我们的数据库。就我们而言,我们只需要确保my_db_user
被允许读取我们尝试备份的数据库。
-p
标志告诉mysqldump
my_db_user
有一个密码,我们将提供该密码。请注意,可以像这样在命令行上直接输入密码
mysqldump -u my_db_user -pmy_db_password my_db_name > /path/to/save/backup_file.sql
注意:以这种方式输入密码被认为是糟糕的安全实践,因为它使密码对不需要了解它的程序可见。我们向你展示这种-p
标志的使用只是为了完整性,以便你知道这些零碎部分是如何工作的。
my_db_name
之后的>
称为“输出重定向符号”,这只是告诉mysqldump
将备份数据发送到特定文件的一种花哨的方式。
为了更好地理解输出重定向,让我们看看如果我们没有在命令末尾添加>
会发生什么。这是在没有输出重定向的情况下运行命令后打印到屏幕上的内容
-- MySQL dump 10.13 Distrib 5.5.40, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: my_db_name
-- ------------------------------------------------------
-- Server version 5.5.40-0ubuntu0.14.04.1
/* ...snip a zillion SQL commands... */
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2014-12-31 20:41:58
哇!我们的整个数据库备份都打印到屏幕上了!
通过使用>
运算符,我们可以告诉mysqldump
将备份放在哪里,以便我们可以下载和使用它。在本例中,我们告诉mysqldump
将我们的备份放在这里,文件名为/path/to/save/backup_file.sql
。
如果你的数据库恰好位于 localhost 之外(例如,如果你有一个单独的 MySQL 服务器托管你的数据库),你可以使用两个额外的标志来告诉mysqldump
在哪里查找
-h your.dbserver.com
告诉mysqldump
使用 URL your.dbserver.com 连接。你也可以使用 IP 地址。-P 1234
告诉mysqldump
使用端口 1234 - 显然,如果你的数据库服务器使用的是不同的端口,请切换此端口。
运行mysqldump
后,你可以在你指定的位置找到备份文件(在我们的示例中为/path/to/save/backup_file.sql
)。获取它的最简单方法是使用你喜欢的 FTP 客户端或使用来自(本地)命令行的安全复制。
scp [email protected]:backup_file.sql .
如何从 .sql 文件还原
一旦你有一个 .sql 文件,你就可以使用mysql
命令行实用程序来还原你的数据库。
以下是你要使用的命令
mysql -u my_db_user -p my_db_name < /path/to/save/backup_file.sql
你会注意到这看起来非常像我们用来创建备份的mysqldump
命令 - 有一些更改
- 第一个命令是
mysql
而不是mysqldump
。 - 输出重定向符号(
>
)已更改为输入重定向符号(<
)。这告诉我们的命令将 .sql 文件作为mysql
实用程序的输入读取。
这所做的只是按顺序重放 .sql 文件中编写的 SQL 命令,以便将数据库重新创建/还原到备份时所处的状态。
请注意,mysql
可以与任何 .sql 文件一起使用 - 不仅限于你使用mysqldump
生成的文件。
在本地,你也可以使用Sequel Pro等免费软件来处理你的数据库,包括运行 .sql。

如何使用 phpMyAdmin 进行备份
phpMyAdmin 是一种软件,允许你查看、编辑和(对我们的目的很重要)导出你的 MySQL 数据库。
- 推荐用于:开发和非关键网站
- 难度:不太难
- 成本:免费
许多网络主机在常规托管计划中提供 phpMyAdmin 访问权限。如果你查看你的托管帐户的仪表板,你可能会找到一个指向 phpMyAdmin 登录屏幕的链接,如下所示

用户名和密码通常与你在wp-config.php
文件中找到的组合相同(请参见上文)。
登录后,你可以在左侧选择要备份的数据库。

接下来,选择“导出”选项卡。

默认情况下,phpMyAdmin 使用“快速”选项,这对于大多数用例来说都是完美的。如果你想尝试一下,在“自定义”部分有很多可以调整的选项。
点击“执行”开始导出并下载你的数据库。
下载完成后,你将拥有 WordPress 数据库的完整备份。
注意:如果你有一个大型数据库或你的 phpMyAdmin 配置为限制下载允许的时间,你的备份文件可能不完整。
确定备份是否成功导出的最简单方法是打开它并滚动到最底部。最后几行应该有一些类似于此的 SQL 语句
--
-- AUTO_INCREMENT for table `wp_users`
--
ALTER TABLE `wp_users`
MODIFY `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=2;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
如果你看到不同的内容,则你的备份可能不完整。如果你的导出超时,你可能会在备份文件的末尾看到一些错误消息。或者你的备份可能只是在任意点中断。
如果你的备份通过 phpMyAdmin 不完整,你可能需要使用“自定义”选项调整导出设置,或者询问你的主机是否可以增加 PHP 请求的时间限制。
如果你的主机不提供帮助,或者你只是不想处理 PHP 的怪癖,请继续阅读以了解一些不同的(更简单)的备份 WordPress 数据库的方法。
如何使用 phpMyAdmin 还原
既然你可以使用 phpMyAdmin 导出数据库,那么自然也可以导入数据库。要从数据库备份中恢复,只需导航到“导入”选项卡即可。

使用上传器上传你的备份文件(.sql 或 .sql.zip,都可以)并点击“Go”以恢复备份。
注意:如果你的数据库很大,或者你的 phpMyAdmin 配置了脚本执行时间限制,则你的恢复可能无法完成。如果遇到超时问题,可以尝试调整 phpMyAdmin 设置或使用其他方法恢复数据库(例如上一节提到的 mysql
命令行工具)。
如何通过虚拟主机备份
除了提供对 phpMyAdmin 的访问权限外,许多主机还提供 MySQL 数据库的定期备份服务。主机将在特定时间间隔(有时是每周、每天或每小时)对你的数据库进行“快照”。你的主机可能会提供基于 Web 的访问权限,以便下载数据库的快照。
- 推荐用于:任何网站
- 难度:简单
- 成本:各不相同。一些主机是免费的,另一些则收取月费。
可用性因主机而异,也因托管计划而异。如果你使用的是每月费用低于 10 美元的共享托管计划,则可能不包含备份。
设置自动备份的成本和流程因主机而异。以下是一些常用的 WordPress 主机的更多详细信息
如何通过插件备份
备份 WordPress 网站最简单的方法之一是使用插件。
- 推荐用于:任何网站
- 难度:简单
- 成本:各不相同,取决于你需要的功能。免费插件可以进行基本备份。付费插件具有便捷的功能。
有许多备份插件可用,但对于开发者来说,一个特别值得关注的是 WP DB Migrate,以及它的付费版本 WP DB Migrate Pro。
对于简单的备份,免费版本已经足够了。以下是如何使用 WP DB Migrate 获取数据库副本的方法
- 使用 WordPress 内置的插件搜索和安装界面安装 WP DB Migrate 插件。安装后请务必激活!
- 在你的仪表盘上转到“工具” → “WP DB Migrate”。
- 选择“下载为 .zip”。如果你只是想下载数据库副本以进行安全保管,则可以删除查找/替换字段。
- 点击“迁移”,你的数据库副本将保存到你的电脑上。
如果你是一名开发者,值得一看 WP DB Migrate 的专业版。使用专业版,你可以同步两个 WordPress 网站的数据库。
例如:假设你正在处理一个实时网站,并且你需要一个数据库副本来进行开发工作。使用 WP Migrate DB Pro,你可以简单地使用插件的界面将实时版本同步到你的开发网站。如果你做了很多 WordPress 工作,它会改变你的开发方式。

另一个值得注意的备份插件是 iThemes 的 BackupBuddy。虽然 WP DB Migrate 具有许多开发者可以使用的功能,但 BackupBuddy 对于“普通” WordPress 用户来说非常出色。BackupBuddy 可以执行计划备份(就像你的虚拟主机一样)并将备份发送到各种位置,例如电子邮件、FTP、DropBox、AWS 等。
在 WordPress.org 代码库中有很多 备份插件,除了 BackupBuddy 和 WP DB Migrate Pro 之外,还有很多高级选项。
使用备份服务
最后,让我们看看如何使用备份服务备份 WordPress 数据库。
使用备份服务是保存网站备份的最简单方法。当然,它也是最昂贵的方法。
- 推荐用于:实时/生产网站
- 难度:最简单
- 成本:每月费用,从 5 美元到 29 美元不等。
以下是它的工作原理
- 支付每月(或每年)费用。
- 向服务提供访问你网站的权限。对于某些服务,你需要安装插件。对于其他服务,你需要提供你主机登录凭据。
- 备份会定期自动进行并保存到云端。或者在 VaultPress 的情况下,备份会实时发生。
以下是一些 WordPress/MySQL 备份服务
备份服务需要最少的设置,可以持续备份你的网站,包括错误检查,并且(在 VaultPress 的情况下)可以为你的网站进行安全监控。
开始备份
现在你已经准备好备份你的 WordPress 数据库了。是否有你认为我们忽略的备份方法、插件或服务?请在评论中添加。
很棒的文章,另一个值得注意的(免费)插件,我用它来备份不仅仅是数据库,还有网站文件,是 Duplicator。它使将网站从本地迁移到暂存环境或用于一般备份变得非常容易。你得到一个 installer.php 文件和一个 zip 文件,你可以上传它们,运行安装程序,输入新的 URL 信息(或者不输入,因为插件可以自动检测,准确率几乎为 100%),然后 BAM,你的网站就会在几秒钟内自动安装到新主机上。
我知道这听起来像是在做广告,但我是一个合法的开发者,而不仅仅是在推销产品。我只是忍不住要提一下,因为我评估了很多这样的插件,而这个插件是迄今为止最好的。
Duplicator 太棒了。备份/迁移网站最简单的方法。
如果你可以编写类似的东西并将其连接到 grunt/gulp,我愿意付钱给你。
…或者只是将你的 WordPress 托管在 Google App Engine 上,并使用 Google Cloud SQL,它每天自动备份所有数据库 :)
并且让 Google 更多地监视你。不,谢谢。
至少可以说,拥有自己网站的控制权有一种特殊的魅力。
@Martijn 如果你认为 Google 是唯一一个关注你的信息的人,那你就错了。
不错的文章。我唯一想补充的是有关设置 cron 作业或等效作业以安排定期备份的说明。
如果使用共享主机,大多数网站托管公司不允许这样做?虽然如果你将自己的网站存储在自己的服务器上,那么我想你就可以开始了..对于共享主机用户还有其他解决方案吗?
在使用 Drupal 一年并遭受折磨后,我开始更多地使用 WordPress。关于 phpMyAdmin 导出的一个说明…我不确定“快速”方法实际选择的是什么,但根据各种培训(书籍、lynda.com 等),更安全的方法是选择“自定义”并选中“添加删除表…”并取消选中“添加创建过程…”。再次强调,也许这正是“快速”导出设置的内容,但了解这一点总是有好处的。
Brian Krogsgard 在一条推文中提到,对于命令行数据库方面,这一点值得关注:http://wp-cli.org/commands/db/
这里需要考虑的另一件事是,这些选项不需要相互排斥。我实际上使用了所有这些选项。在 CSS-Tricks 上,我使用 VaultPress 进行实时备份和安全监控。我通过 Media Temple 获取服务器快照。我偶尔使用命令行保存备份并将其存储在本地(通常是为了使我的开发环境保持最新)。在其他网站上,我使用 WP DB Migrate Pro。
抱歉重复了,但这里再投Duplicator一票。它对客户和开发者都很棒。
我以为phpmyadmin很简单,但是我们可以在我们的网站上为每天的备份计划创建cron作业吗?
在本地服务器上,我们可以在sqlyog上创建…
也许有人可以帮忙?
我正在使用Online Backup插件。选择备份选项卡,点击“本地”单选按钮,然后开始备份。备份文件和数据库,将副本放在您的主机上,您可以点击另一个按钮下载副本。
还推荐ELI的“反恶意软件”。这个插件修复了我今年秋天在一个网站上发现的广泛的后门PHP(夏季通过Mailpoet插件传入的PHP),使该网站能够再次通过Google的恶意软件测试。
WP_CLI 对我来说非常有效。这是最简单、最快的方法。
我不明白为什么mysqldump“有点难”。它非常简单。它是一个单一的命令,您可以将其存储在脚本文件中,并让您的数据库备份到您的本地计算机,只需双击即可。
如果我没记错的话,您甚至可以通过SSH管道让mysqldump工作,我希望每个人都以某种形式或其他形式需要它。
并且执行反向操作的脚本也同样简单。
难度取决于受众。
阅读这篇文章的许多人可能不熟悉或不习惯命令行,更不用说设置SSH了。
一旦你习惯了并且一切设置好,它就很容易。如果你以前从未做过,它可能很困难。就像任何事情一样!
我的“简单”备份解决方案使用Laravel 备份管理器软件包在本地和Dropbox中进行每日备份。因为它是一个artisan命令,所以使用 Dispatcher进行计划很简单。简单。
对我来说很简单。它之所以简单,是因为我已经具备了大部分所需的知识和设置。如果我在一年前尝试过,对我来说是不可能的。
如果你在命令行上很舒适,这很容易,但并非所有前端开发人员都是如此。这就是为什么它是“有点”——它是进入Shell领域的良好入门步骤 :)
使用HTTRACKER备份网站
这篇文章是关于备份网站数据库的,而HTTracker更适合于抓取网站内容,因为它呈现给查看者(一项相当无关的任务)。
不要混淆这两件事很重要 :)
我推荐wp-cli http://wp-cli.org/,因为它非常强大,一旦你习惯了它,每个操作都非常快。非常适合喜欢在终端中工作的人。
作为新手,本教程对我来说非常有用。感谢并继续努力 :)
我使用BackWPUp (https://wordpress.org/plugins/backwpup/)。我可以将数据库和文件备份自动备份到备份文件夹、外部FTP和其他选项。
我已经开始在我的所有网站上使用BackWPUp,以便按计划将数据库和文件备份到多个目的地(dropbox、服务器等)。设置起来真的很容易。尽管我最近在某个地方读到,某些网络主机出于某种原因禁止此插件……有人知道为什么吗?
在执行mysqldump或使用Migrate DB Pro时,您是否遇到过UTF-8字符的问题?我似乎总是无法正确重新导入通过这些方法备份的数据,因为它无法正确转换像反引号或“花哨”撇号之类的字符。如果我使用SequelPro导出(顺便说一句,您可能还想将其添加为备份方法),我总是可以毫无问题地重新导入它。
仅供参考,数据库都设置为UTF8,表为UTF8,wp_config文件设置为以UTF8访问数据库。
另一方面,对于phpMyAdmin导出中的大型表,请在导出中选择“自定义导出方法”,并将“创建查询的最大长度”设置为高得多。这将避免任何表过大的问题。
谢谢
如果您想要一个替代解决方案来备份您的数据库、服务器、虚拟机和工作站,请尝试CloudBacko Pro。它是备份的最佳解决方案。它主要支持Windows、Linux、Mac OS等。您可以在此处查看此软件http://www.cloudbacko.com
值得一提的是,Sequel Pro还允许通过SSH连接到远程数据库。
在创建新连接时只需选择SSH选项卡,然后输入连接到服务器的所有信息以及数据库的信息。
您可以使用各种WordPress插件自动备份主题、插件和数据库。
Updraftplus是其中最棒的之一。
只是友好地提醒一下我一直在客户端站点上遇到的问题……许多这些解决方案对于大型WordPress站点根本不起作用!您可以增加phpMyAdmin运行更大备份和更长时间的内存和超时,但是如果您有1000MB的上传文件要备份和400MB的数据库……那么所有远程服务也很糟糕。我个人必须在服务器上使用类似Rsync的东西,它可以配置为仅上传自上次备份以来更改的文件!
不错的文章。这篇文章将帮助那些想要在他们的博客中添加某种运动的人。
感谢分享!
很棒的文章——你们说服我使用Duplicator了。
它是免费的,所以也是个明智之举。
WordPress中的备份非常重要,文章帮助我们了解如何自己管理。
您并不一定需要命令行支持才能使用mysqldump。
您还可以从本地计算机运行mysqldump,并使其直接连接到您的远程mysql数据库(使用–ssl开关)。您确实必须在网络主机的控制面板中(每个数据库)允许您的本地IP地址访问。为此,您必须从您的提供商处获得固定的IP地址。
由于我的本地计算机每天24小时运行,因此我已将其自动化,它每天都会备份我所有远程/实时数据库。在您无法访问命令行的简单共享网络托管中效果很好。
对于那些不太了解命令行的人来说,使用命令行备份WordPress有点困难。但是使用phpmyadmin和插件是最简单和最好的方法。是的,但是导出超时问题会导致9次中有10次出现问题,因为大多数网络主机都有超时限制,所以在进行备份之前请注意这一点。
很棒的文章!一直在寻找像Sequel Pro这样的本地程序来管理我的数据库。
CodeGuard也很棒!它救了我很多次。
读者“x mix”写道