以下是 Erez Elias 的客座文章。Erez 最近参加了一个 WordCamp,并写信给我,希望写一些关于 WordPress 的内容。我们一致认为这是一个有趣的话题,也是我一直想记录下来的内容,因为我一生中已经做过大约 100 次了,而且总有一些小细节需要查找。
我从 WordPress 用户那里看到的一个主要挫折来源是,当他们想要迁移 WordPress 网站时。就像,将整个网站从一个主机公司迁移到另一个主机公司。在本文中,我将引导您完成将 WordPress 网站迁移到新主机服务的 4 个简单步骤。
本文假设您同时拥有对旧服务器和新服务器的访问权限。您可以通过 FTP 或 SSH 登录到两者。
步骤 1) 备份数据库
WordPress 将数据存储在 MySQL 数据库中。您需要迁移此数据库才能迁移网站,这可以说是最棘手的部分。您需要首先备份旧网站的数据库。
方法 1) 使用插件
有一种方法可以使用插件备份数据库。请注意,如果您正在处理大型数据库(例如,超过 50 MB),最好使用方法 2。
WordPress 有许多用于备份数据库的插件,我最喜欢的是一个名为 wp-db-backup 的插件。安装并激活插件后,在管理面板中选择工具 > 备份。

该插件将查找同一数据库中的其他表。这些非“核心”WordPress 表可能来自您使用过的其他存储数据的插件。

选择是希望通过电子邮件发送备份文件还是直接下载,然后单击立即备份!按钮。

方法 2) 使用命令行
如果我们使用 SSH 备份,我们可以更接近底层。SSH(安全外壳)是一种网络协议,允许您通过加密连接安全地访问服务器。
首先,您需要连接到服务器。您需要拥有服务器的 IP 地址、用户名和密码。您还需要一个命令行客户端,例如 Mac 的终端或 Windows 的 Putty。
$ ssh username@[server-ip]
如果这是您第一次建立连接,您将看到一个提示您确定要继续连接吗?输入yes并按回车键。然后系统将要求您输入 SSH 登录密码。之后,您将通过 SSH 连接到服务器。
现在,您可以使用以下命令导出数据库。
$ mysqldump -u [username] -p [database_name] > [name_your_backup_file].sql
您需要将 [括号] 中的选项替换为您自己的信息。此处的用户名与您的 SSH 登录名不同,它是您的 MySQL 访问用户名。如果您忘记了数据库名称,则可以从 `wp_config.php` 文件中获取。此命令执行后,还会提示您输入密码,该密码是数据库密码,您也可以从 `wp-config.php` 文件中获取。
这将创建一个文件(您在该命令的最后一部分中命名),该文件是数据库的完整备份。您可能希望导航到一个方便的目录以在其中运行该命令,以便它将在该目录中创建文件。或者在命令本身中放入该文件路径。
您需要获取此 database.sql 备份文件的本地副本。一种方法是通过 FTP 登录到服务器,导航到您转储它的位置,然后从那里下载它。或者,由于您已经在命令行中,因此关闭 SSH 连接并使用 scp
命令下载它。例如
$ scp [username]@[server-ip]:[backup_file].sql .
步骤 2) 备份文件
现在是时候备份旧服务器上的实际文件了。那里有您的主题文件、插件、上传…所有内容。甚至您的 WordPress 核心文件,尽管现在也是下载新服务器的新副本的好时机。
要从旧服务器下载所有文件,请使用 FTP 客户端(如 Filezilla)登录到您的服务器。要么从 Web 根目录下载所有内容,要么只下载 `wp-content` 文件夹(如果您要首先在新服务器上安装 WordPress 的新副本)。

这可能需要一段时间!它可能包含相当多的文件和图像。
步骤 3) 将文件移动到新服务器
现在,您也可以通过 FTP 登录到新服务器,并将您刚刚从旧服务器下载的文件上传到 Web 根文件夹。这可能也需要一段时间(上传通常比下载慢一点)。
步骤 4) 将数据库导入新服务器
在此步骤中,您将数据库导入服务器。此步骤也有两种方法:通过 PHP myAdmin 或通过 SSH。
方法 1) 通过控制面板
大多数 Web 主机都会提供某种控制面板,让您访问数据库等内容。它可能是 cPanel。它可能是 Plesk。它可能是一些自定义的东西。

您可能将使用控制面板在新服务器上创建新数据库。控制面板很可能允许您访问名为 phpMyAdmin 的软件,这是一个专门用于通过 Web 管理 MySQL 的工具。

打开新网站的新数据库。
现在是关键时刻:导入旧网站的备份 `.sql` 文件!
单击顶部导航栏中的导入选项卡。

现在,您可以选择本地计算机上的 `.sql` 文件并运行它(按Go按钮)。

方法 2) 通过 SSH
如果数据库文件太大,就像导出一样,您可以通过 SSH 登录到服务器并在那里进行导入。首先将数据库导出上传到新服务器,然后通过 SSH 登录到服务器(上一节中提供了相关说明),然后运行以下命令以运行导入
$ mysql -p -u [username] [database_name] < [database_name].sql
同样,此处的用户名是 MySQL 用户,而不是 SSH 用户。
您可能还需要更改一些选项
如果您在迁移服务器的同时也更改了网站的URL,则可能需要执行一些其他 MySQL 操作。例如,如果您要从 domain-one.com 更改为 domain-two.com,则需要更改 `wp_options` 表中的 `siteurl` 和 `home` 选项。

但这不会更改帖子内容中硬编码的指向 domain-one.com 的引用(例如图像源)。如果您也需要更改这些内容,可以在关于将 WordPress 迁移到 HTTPS的帖子中找到一些可以参考的 SQL 语句,这可能会有所帮助。
希望本文能帮助您将 WordPress 网站迁移到新位置!
对于最后一步,这个很有用 https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
我总是不得不将我的数据库导出成小块(1MB 或类似大小,现在记不清了),因为 phpMyAdmin 中存在文件大小上传限制。这没什么大不了的,但这是仅仅我的主机商限制还是 phpMyAdmin 的限制呢?
您可以将 MySQL 文件作为压缩归档文件上传到 PhpMyAdmin,这通常比完整数据库小很多。我发现这在大多数情况下可以解决问题。此外,默认情况下 PhpMyAdmin 的上传限制设置为 2MB。如果您可以在服务器上访问 php.ini 文件,则可以修改参数(在共享服务器上可能无法做到这一点)
upload_max_filesize = 20M
post_max_size = 20M
如果您能够做到这一点,您还需要在更改后重新启动 Apache 服务器!
Sequel Pro(尽管名称如此,但它是免费的)是一个非常好的工具,可以从 GUI 的角度与 MySQL 进行交互,如果您拥有非常大的数据库并且正在努力解决文件大小限制。
我同意 Chris 的观点 - 在处理这类事情时,您希望尽可能接近底层。
伙计们,只有一个工具是您迁移 WordPress 网站时唯一需要的
https://wordpress.org/plugins/duplicator/
完全同意。我所有的经验都表明,如今 Duplicator 是将网站从一个主机迁移到另一个主机时最简单、最快捷和最轻松的选择。
真是太棒了!对我来说完美地工作了!谢谢!
您只需要
https://wordpress.org/plugins/all-in-one-wp-migration/
一些想法
您也可以通过 ssh 迁移所有文件,从一台服务器到另一台服务器。这比将所有内容下载到您的计算机上然后再发送到新服务器要快得多且效率更高。
我会使用 rsync,它更“易读”,但您也可以使用 scp。如果您需要/想要多次复制而无需重新发送所有内容(仅重新发送已更改的内容),则 rsync 更好。当然,sql 导出文件也是如此。
“你可以”而不是 Toi Can。该死的自动更正。
可能有点离题,但我相信有一个名为 wordmove 的 rubygem 可以用于此类迁移的工作流程。
序列化数据怎么办?:P
Interconnect IT 的搜索和替换脚本对于序列化数据非常有效。 https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
关于“如何迁移您的 WP 网站”的帖子永远不会嫌多,是吗?多年来我一直遵循 Bill Erickson 的方法,因为它总是有效。在任何地方。尽情享受:http://www.billerickson.net/migrating-wordpress-websites/
为了完整起见,在迁移除小型博客以外的任何内容时,还需要一些其他技巧
不要通过 FileZilla 或其他工具逐个下载和上传所有文件。相反,创建它们的归档文件,然后一次性下载它们。更好的是,直接在远程服务器上下载它们,跳过下载到您自己的计算机并从其上传的中间步骤。
在源机器上,对
uploads
文件夹进行 tar 和 gzip 压缩(c=创建
,z=gzip
,v=详细
,f=输出文件
)在目标机器上,从源机器获取文件,然后解压缩和解压(
x=提取
)根据您的服务器设置,您可能需要在此处调整权限,但这属于另一个主题。
不要手动处理源文件。如上所述,我们只对
uploads
文件夹进行了归档。所有其他文件夹都应以其他方式管理(版本控制或 Composer 或混合使用等)。如果您没有任何这些,您可以按照上述相同的步骤操作,但对整个网站(wp-content
或其父目录)进行归档。使用 WP-CLI 帮助更改数据库中的 URL。不要直接通过 SQL 更改 URL。只需安装 WP-CLI(某些 WordPress 主机预装了它!),然后运行
有关更多详细信息,请参阅http://wp-cli.org/commands/search-replace/。
实际上,只需将 WP-CLI 用于与数据库相关的所有操作,包括从旧网站导出它并将其导入到新网站中。请参阅http://wp-cli.org/commands/db/export/和http://wp-cli.org/commands/db/import/。WP-CLI 的优点在于它读取您的
wp-config.php
文件,这意味着无需像手动运行mysqldump
时那样手动指定凭据。我认为对于没有 ssh 访问权限或任何主机面板工具来解压缩 zip 文件的共享主机来说,这是不可避免的。
或者还有其他原因导致这样做不好吗?
我来这里就是为了寻求这个建议。您绝对需要更改的不仅仅是站点/主页 URL,对于许多人来说,他们会尝试从管理面板编辑它们,并被重定向到旧网站。WP-CLI 是最好的,但其他序列化工具也很可靠。替换数据库中的 URL 是我所在地区的一个强制性步骤。
压缩后再迁移的提示也很棒。我还想说,如果您已经在使用 SSH,请跳过本地下载,并直接从一台服务器拉取压缩文件到另一台服务器。
在 wp-config.php 中定义新的 URL 对于更改域名而无需筛选数据库很有用。
我正要发布这个。这是迁移网站最快捷的选择。一旦您使其正常工作,您就可以在不着急的情况下安静地执行数据库中的搜索/替换操作。
WP Sync DB(WP Migrate Pro 的分支)+ WP-Cli 插件 FTW!;)
您可以创建准备好的“方案”,然后从您的终端或 WP GUI 推送/拉取整个数据库。
快速且万无一失,在任何环境中都非常易于设置。
至于文件迁移,Transmit 和 SFTP Sync 目前是我的首选武器(当远程服务器不可用完整 SSH 时,例如入门级 LAMP 托管)
但对此并不完全满意……有时,开发/生产环境之间会出现权限不匹配。我放弃了来自 CLI 的 SFTP,因为我发现它不如 Transmit 可靠:/
仍然倾向于使用 WP 进行一键双向迁移,虽然离此目标还有一段距离。
我还发现wp-cli对于备份很有帮助,如果您对命令行比较熟悉并且在您的主机商上安装了 wp-cli(通常情况下是这样!)。
wp db export <backupfilename.sql>
您也可以用它来导入。