
WordPress 搬家完全指南:从备份到上线的每一步
STEPS
操作步骤
照着做即可。做完一步就勾上,勾过的步骤会变灰,下次回来还是这个进度。
-
动手之前,先搞清楚你要搬的东西:
程序文件wp-admin/、wp-includes/:WordPress 核心,从官网下载的同版本文件即可,不需要搬(当然搬了也没坏处)。wp-content/:你真正要搬的核心——主题、插件、上传的图片/媒体、缓存。这一目录丢不得。根目录文件:wp-config.php(数据库配置)、.htaccess(伪静态规则)、index.php 等。数据库存着文章、页面、评论、设置、用户信息、菜单,以及大量路径和域名。
最大的坑:数据库里很多设置(比如主题 mods、小工具、序列化数组)是以「带长度的字符串」形式存的,例如:
a:1:{s:8:"old_url";s:19:"https://old.com/img";}其中 s:19 表示后面那段字符串长度恰好是 19。如果你直接用 SQL 把 old.com 替换成 new.net(字符数变了),s:19 就对不上,PHP 反序列化失败,结果就是主题设置丢失、小工具全没了、图片不显示。这就是为什么不能简单无脑 REPLACE。
-
适合想要完全掌控、或服务器不允许装插件的环境。
-
文件备份:把整个站点目录(至少 wp-content + wp-config.php)打包。
# 在站点根目录
tar -czf wp-site-backup.tar.gz wp-content wp-config.php .htaccess index.php数据库备份:用 mysqldump(命令行)或 phpMyAdmin 的「导出」→ 快速/SQL 格式。
mysqldump -u 用户名 -p 数据库名 > wp-db-backup.sql -
把 wp-content、wp-config.php、.htaccess、index.php 传到新服务器的站点根目录。
(如果你在新服务器已经装过同版本 WP,可以只覆盖 wp-content 和更新 wp-config.php。) -
# 先建库(或用面板建库),再导入
mysql -u 新用户名 -p 新数据库名 < wp-db-backup.sql -
打开新服务器上的 wp-config.php,改这三处:
define('DB_NAME', '新数据库名');
define('DB_USER', '新数据库用户');
define('DB_PASSWORD', '新密码');
define('DB_HOST', 'localhost'); // 有些主机是内网地址,按新主机给的填 -
千万不要直接在 phpMyAdmin 里 UPDATE ... REPLACE(old, new) 全表替换——会破坏序列化数据(见第一节)。正确做法三选一:
方案 A:用 WP-CLI(最推荐,自动处理序列化长度)
wp search-replace 'https://old.com' 'https://new.com' --all-tables --dry-run
# 确认无误后去掉 --dry-run 真正执行
wp search-replace 'https://old.com' 'https://new.com' --all-tables方案 B:用插件处理(见第三节,例如 "Better Search Replace" 或 "All-in-One WP Migration")。
方案 C:手动 SQL(仅当你确认没有序列化数据时)
UPDATE wp_options SET option_value = REPLACE(option_value, 'https://old.com', 'https://new.com');
UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://old.com', 'https://new.com');
UPDATE wp_posts SET guid = REPLACE(guid, 'https://old.com', 'https://new.com');⚠️ 方案 C 不处理序列化,只适用于纯文本字段。绝大多数站点请优先用方案 A 或 B。
-
后台「设置 → 固定链接」点一下「保存更改」,WordPress 会重写 .htaccess。
如果你用的是 Nginx,记得把伪静态规则配上(可从后台或 WP 官方文档复制 Nginx 规则)。 -
登录后台,确认地址是新域名。前台刷新,确认图片、CSS、JS 都加载正常。若启用了缓存插件/CDN,清一遍缓存。
-
-
-
旧站装插件 → Export → 下载 .wpress 文件。新站装同款 WP + 同款插件 → Import → 上传 .wpress。插件会自动解包文件、导入数据库、并自动替换域名(它内部就是按序列化安全的方式处理的)。导入完成后按提示重新登录(默认账号密码沿用旧站)。
注意:免费版有单文件大小限制(~512MB 左右,随版本变化),超大站点需付费或拆分。 -
旧站装 Duplicator → 新建 Package → 生成「安装包 + installer.php」。把这两个文件传到新服务器根目录。浏览器访问 https://new.com/installer.php,按向导填新数据库信息,自动完成文件部署 + 数据库导入 + 域名替换。完成后删除 installer.php 和安装包(安全)。
-
对比项手动搬家插件搬家可控性高中上手难度需要命令行/数据库基础低序列化安全需自己用 WP-CLI插件已处理超大站点稳可能受体积限制推荐人群开发者 / 运维新手 / 求快
-
-
前台白屏 / 后台白屏:八成是 wp-config.php 数据库信息填错,或插件冲突。先开调试:define('WP_DEBUG', true);。图片不显示、裂图:域名没替换干净,或 wp-content/uploads 没传全,或文件权限不对(目录 755、文件 644)。登录后台又跳回旧域名:wp_options 表里的 siteurl / home 还是旧值。直接 SQL 改或用 WP-CLI 改。文章链接 404:固定链接没重建,或 Web 服务器伪静态没配。主题设置、小工具全没了:就是序列化数据被粗暴 REPLACE 破坏了,用 WP-CLI 重跑 search-replace 即可恢复(前提是当时没用方案 C 硬改坏)。文件权限 / 所有权:Linux 上传后若属主不对,后台无法自动更新。用 chown -R www-data:www-data /站点目录(按你的 Web 用户调整)。
-
旧站文件已完整备份(wp-content + 配置) 旧站数据库已导出 新服务器创建好数据库和用户 文件已上传到新服务器 wp-config.php 数据库连接已更新 域名已用序列化安全的方式替换(WP-CLI / 插件) 固定链接已重新保存 伪静态(.htaccess / Nginx)已配置 前台图片、样式、JS 加载正常 后台可正常登录且地址为新域名 缓存 / CDN 已刷新 旧服务器在确认无问题后再下线(建议保留 7 天)
-
# 备份文件
tar -czf wp-site.tar.gz wp-content wp-config.php .htaccess index.php# 备份数据库
mysqldump -u 用户 -p 库名 > wp-db.sql# 导入数据库
mysql -u 新用户 -p 新库名 < wp-db.sql# 序列化安全的域名替换(WP-CLI)
wp search-replace 'https://old.com' 'https://new.com' --all-tables# 修文件权限
chown -R www-data:www-data /站点目录
find /站点目录 -type d -exec chmod 755 {} \;
find /站点目录 -type f -exec chmod 644 {} \;本文由 LCByte(https://www.lcbyte.com)整理,转载请保留署名。
全部步骤已完成,可以开工了。
发表回复