把WordPress博客搬到本地搭建测试环境

前言

之前我想给博客换一套主题,再试几个插件,又怕手一抖把线上的站搞崩,于是决定把云服务器上的 WordPress 博客完整地搬到自己 Win10 系统的电脑上,做一个本地测试环境,这样就可以随便折腾了。

做之前觉得应该挺简单的,结果做的时候发现坑还真不少:比如数据库导入报错、后台死活打不开、图片全加载不出来、连登录地址都找不到了……折腾了一个下午才全部搞定。

今天就把整个流程和我踩过的坑整理出来,如果你也想在本地安全地测试主题、插件或者改代码,可以参考一下。

整体流程

踩完坑之后,我重新规划了一下 WordPress 博客的迁移流程:

  1. 从云服务器导出数据库和网站文件
  2. 在本地电脑安装 XAMPP,启动 Apache 和 MySQL
  3. 在本地的MySQL新建数据库,导入 .sql 文件
  4. 网站文件放进 C:\xampp\htdocs\ 文件夹
  5. 修改 wp-config.php 里的数据库连接参数,连接到本地数据库
  6. 修改本地数据库里的 siteurl 和 home
  7. 使用插件批量替换本地数据库里的旧域名
  8. 处理各种常见报错
  9. 登录WordPress后台,确认文章、页面、图片等等的显示正常
  10. 备份本地的WordPress博客以及数据库收尾

我的云服务器是 Ubuntu 22 + 1Panel 管理的,如果你用的也是 1Panel 或者宝塔,流程应该差不多。

第一步:准备本地环境 XAMPP

XAMPP 是一款免费、开源的跨平台本地服务器集成环境,名称中的 X 代表跨平台,A、P、M 分别对应 Apache、PHP 和 MariaDB(早期为 MySQL)。它将 Web 服务器、数据库和脚本语言打包在一起,只需一次安装,就能在本地电脑上快速搭建起运行 WordPress 等 Web 应用的测试环境,很适合开发者和初学者使用。

XAMPP 下载地址是在 Apache Friends 官网(https://www.apachefriends.org/download.html),选 Windows 64 位安装包。

有两个细节要注意:

  • 安装路径必须是纯英文。
  • 打开 XAMPP Control Panel,把 Apache 和 MySQL 都点成绿色才算成功。
  • 本地的 MySQL 和 PHP 版本不需要跟服务器严格一致,WordPress 官方推荐 PHP 8.3 以上,XAMPP 默认版本一般够用。后面如果提示数据库连接错误,优先检查账号密码主机名。

第二步:从服务器导出数据

需要导出两样东西,缺一不可:

  • 数据库:进 1Panel 的数据库页面,找到 WordPress 对应的库,用"备份列表"里的备份功能,下载 .sql.gz 文件。博客的所有文章、评论、设置都在这里面。
mysql1
  • 网站文件:进文件管理,把整个 WordPress 根目录打包下载,里面要有 wp-admin、wp-content、wp-includes、wp-config.php 这些文件和文件夹。
网站目录

第三步:导入数据库、放置文件

确保第一步安装的XAMPP Control Panel已经启动,它的 Apache 和 MySQL 都点成绿色了,本地电脑的浏览器打开 http://localhost/phpmyadmin,新建一个数据库,比如 wp_local,在这个数据库里点"导入",上传刚才的 .sql.gz 文件,其他的选项不用管,执行导入操作。

网站文件解压后放到 C:\xampp\htdocs\ 下面。文件夹叫 wordpress,本地访问地址就是 http://localhost/wordpress;如果文件夹叫 wp,就是 http://localhost/wp。

然后编辑本地WordPress根目录的 wp-config.php 文件,将下面的数据库连接信息改成本地数据库的连接信息:

define('DB_NAME', 'wp_local');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

XAMPP 默认用户是 root,密码为空。

第四步:改数据库里的网址(最重要的一步)

WordPress 把旧域名存在了数据库里,不改的话本地会打不开或者一直跳转到线上站。

在 phpMyAdmin 里打开 wp_options 表(如果你的表前缀不是 wp_,换成实际前缀,比如 abc_options),找到 siteurl 和 home 两个字段,都改成:http://localhost/wordpress

也可以直接跑 SQL(跑SQL之前注意备份数据库):

UPDATE wp_options SET option_value = 'http://localhost/wordpress' WHERE option_name = 'siteurl';
UPDATE wp_options SET option_value = 'http://localhost/wordpress' WHERE option_name = 'home';

注意末尾不要带斜杠。改完访问 http://localhost/wordpress/wp-admin,用原来的登录账号和密码就能登录了。

第五步:批量替换残留的旧域名

能登录后台不代表完事,文章正文、图片链接、插件设置里可能还藏着旧域名。推荐用插件来替换,比手改 SQL 安全得多。

以插件 Better Search Replace 为例:

  1. 进入"工具 → Better Search Replace"
  2. Search for 填旧域名比如 jiuyuming.com,Replace with 填 localhost/wordpress
  3. 先勾 Run as dry run 预演一遍,看看会改多少条
  4. 确认没问题,取消 Run as dry run 的勾选,再正式执行
  5. 替换范围一般勾选 Posts、Post meta、Options

如果用的插件是 Ethereal Link Replacer,注意不要勾"Also replace inside post GUIDs",GUID 不建议动。

替换插件报错怎么办

Ethereal 有时会报 Cannot access property starting with "\0" 这种错。原因是数据库里有些数据在本地环境找不到对应的 PHP 类,反序列化时变成了残缺对象。

处理思路:

  1. 缩小范围,只勾 Posts 和 Post meta,取消 Options
  2. 还报错就进数据库手动改相关字段,改之前务必备份

这里必须强调一句:不要直接对 wp_postmeta 和 wp_options 跑 REPLACE 语句。这些表里存着序列化数据,简单替换字符串会破坏数据结构,轻则后台白屏,重则整个站打不开😱。

如果确实要用 SQL 改 wp_options,可以加个条件跳过序列化数据:

UPDATE wp_options 
SET option_value = REPLACE(option_value, 'https://旧域名.com', 'http://localhost/wordpress') 
WHERE option_value NOT LIKE '%s:%';

一些亲历的报错

1.现象:localhost 拒绝连接请求

Apache 没启动。十有八九是 80 端口被占用。解决办法:

  • Apache 的 Config → httpd.conf,把 Listen 80 改成 Listen 8080
  • httpd-ssl.conf 里把 Listen 443 改成 Listen 4433
  • 重启 Apache,之后 phpMyAdmin 地址变成 http://localhost:8080/phpmyadmin

其他处理方式:

  • 以管理员身份运行 XAMPP
  • 安装 Visual C++ 运行库
  • 把 XAMPP 移到纯英文路径。

2.现象:访问 WordPress 博客后台报 Call to undefined function

这是因为插件文件不全或环境冲突导致的。进 wp-content\plugins\ 文件夹,把报错的插件文件夹改名为 XXX-disabled,刷新后台会自动停用它。如果多个插件都报这种错,八成是文件没传完整,重新打包下载一次 wp-content。

3.现象:访问 WordPress 博客后台提示 Not Found

通常是 URL 重写没开,或者固定链接失效:

  • httpd.conf 里确认 mod_rewrite.so 没被注释
  • 把 AllowOverride None 改成 AllowOverride All,重启 Apache
  • 后台"设置 → 固定链接"什么都不改,直接点一次保存

4.现象:wp-login.php 死活打不开

因为之前在服务器上用插件改过登录地址,默认登录页被屏蔽了,结果后来久了就搞忘了登录地址被改过的事,就一直访问不了后台界面。

在 wp-content\plugins\ 文件夹找到 wps-hide-login、hide-my-wp 这类插件文件夹,改名加 -disabled,再用默认的 http://localhost/wordpress/wp-login.php 访问就行。顺手检查一下 wp-config.php 里有没有 WP_HIDE_LOGIN 之类的配置,有的话先注释掉。

进后台之后建议把这个插件直接删掉,本地测试环境用默认登录地址最省心。

5.现象:有些图片在文章中还是用的旧域名地址

有些图片在文章中无法显示,是因为它的地址还是用的旧域名地址,这种旧域名地址一般藏在 wp_postmeta 或 wp_options 的角落里,有的还被转义过。

用 Better Search Replace 搜索的时候试试 https:\/\/旧域名.com 这种转义格式,然后替换掉。还可以用 SQL 先查一下藏在哪:

SELECT * FROM wp_postmeta WHERE meta_value LIKE '%旧域名%' LIMIT 5;

如果图片是页面构建器插件管理的,可能要在插件里重新选一次图。

收尾清单

  1. 备份:迁移前、改数据库前、批量替换前,各备份一次,本地至少留一份 .sql 和网站文件压缩包
  2. siteurl 和 home 必须改:这两个字段决定后台和前台地址,改完后再登录后台验证。
  3. 验证顺序:先打开首页 → 再登录后台 → 再检查文章图片 → 最后才批量替换域名
  4. 固定链接重新保存一次,刷新重写规则
  5. 插件冲突优先改名禁用,建议一次性全停用,站点跑起来后再按需开启
  6. 本地环境不要装改登录地址的插件
  7. GUID 尽量不改,本地测试环境实在有阻碍的话,备份之后改了也没事

总结

整个迁移说难不难,核心就五件事:

  • 导出完整数据
  • 改 wp-config.php 文件
  • 改数据库中的 siteurl 和 home
  • 安全替换所有旧域名地址
  • 插件冲突用改名法处理。

其中最容易翻车的就是序列化数据和被改掉的登录地址,我在这两处加起来耗了一个多小时 (´-ω-`)

有了这套本地测试环境,以后换主题、试插件、改代码都可以先在本地跑一遍,确认没问题再上线,线上站点就安全多了。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!