前言
之前我想给博客换一套主题,再试几个插件,又怕手一抖把线上的站搞崩,于是决定把云服务器上的 WordPress 博客完整地搬到自己 Win10 系统的电脑上,做一个本地测试环境,这样就可以随便折腾了。
做之前觉得应该挺简单的,结果做的时候发现坑还真不少:比如数据库导入报错、后台死活打不开、图片全加载不出来、连登录地址都找不到了……折腾了一个下午才全部搞定。
今天就把整个流程和我踩过的坑整理出来,如果你也想在本地安全地测试主题、插件或者改代码,可以参考一下。
整体流程
踩完坑之后,我重新规划了一下 WordPress 博客的迁移流程:
- 从云服务器导出数据库和网站文件
- 在本地电脑安装 XAMPP,启动 Apache 和 MySQL
- 在本地的MySQL新建数据库,导入
.sql文件 - 网站文件放进
C:\xampp\htdocs\文件夹 - 修改
wp-config.php里的数据库连接参数,连接到本地数据库 - 修改本地数据库里的
siteurl和home - 使用插件批量替换本地数据库里的旧域名
- 处理各种常见报错
- 登录WordPress后台,确认文章、页面、图片等等的显示正常
- 备份本地的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文件。博客的所有文章、评论、设置都在这里面。

- 网站文件:进文件管理,把整个 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 为例:
- 进入"工具 → Better Search Replace"
- Search for 填旧域名比如
jiuyuming.com,Replace with 填localhost/wordpress - 先勾 Run as dry run 预演一遍,看看会改多少条
- 确认没问题,取消 Run as dry run 的勾选,再正式执行
- 替换范围一般勾选 Posts、Post meta、Options

如果用的插件是 Ethereal Link Replacer,注意不要勾"Also replace inside post GUIDs",GUID 不建议动。
替换插件报错怎么办
Ethereal 有时会报 Cannot access property starting with "\0" 这种错。原因是数据库里有些数据在本地环境找不到对应的 PHP 类,反序列化时变成了残缺对象。
处理思路:
- 缩小范围,只勾 Posts 和 Post meta,取消 Options
- 还报错就进数据库手动改相关字段,改之前务必备份
这里必须强调一句:不要直接对 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;如果图片是页面构建器插件管理的,可能要在插件里重新选一次图。
收尾清单
- 备份:迁移前、改数据库前、批量替换前,各备份一次,本地至少留一份
.sql和网站文件压缩包 - siteurl 和 home 必须改:这两个字段决定后台和前台地址,改完后再登录后台验证。
- 验证顺序:先打开首页 → 再登录后台 → 再检查文章图片 → 最后才批量替换域名
- 固定链接重新保存一次,刷新重写规则
- 插件冲突优先改名禁用,建议一次性全停用,站点跑起来后再按需开启
- 本地环境不要装改登录地址的插件
- GUID 尽量不改,本地测试环境实在有阻碍的话,备份之后改了也没事
总结
整个迁移说难不难,核心就五件事:
- 导出完整数据
- 改 wp-config.php 文件
- 改数据库中的 siteurl 和 home
- 安全替换所有旧域名地址
- 插件冲突用改名法处理。
其中最容易翻车的就是序列化数据和被改掉的登录地址,我在这两处加起来耗了一个多小时 (´-ω-`)
有了这套本地测试环境,以后换主题、试插件、改代码都可以先在本地跑一遍,确认没问题再上线,线上站点就安全多了。

