TUTORIAL

WordPress 搬家完全指南:从备份到上线的每一步

返回教程中心
  • 共 16 步
  • 入门
  • 30

WordPress 搬家完全指南:从备份到上线的每一步
WordPress 搬家(迁移)本质只有两件事:把文件搬过去,把数据库搬过去。但凡只搬了一样,或者数据库里还残留旧域名,站点就会白屏、图片裂开、后台跳回旧地址。本文把两种主流方法和那个最坑的「序列化数据」问题一次讲透。


STEPS

操作步骤

照着做即可。做完一步就勾上,勾过的步骤会变灰,下次回来还是这个进度。

0 / 16 步已完成

  1. 动手之前,先搞清楚你要搬的东西:
    程序文件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。

  2. 适合想要完全掌控、或服务器不允许装插件的环境。

    1. 文件备份:把整个站点目录(至少 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

    2. 把 wp-content、wp-config.php、.htaccess、index.php 传到新服务器的站点根目录。
      (如果你在新服务器已经装过同版本 WP,可以只覆盖 wp-content 和更新 wp-config.php。)

    3. # 先建库(或用面板建库),再导入
      mysql -u 新用户名 -p 新数据库名 < wp-db-backup.sql

    4. 打开新服务器上的 wp-config.php,改这三处:
      define('DB_NAME', '新数据库名');
      define('DB_USER', '新数据库用户');
      define('DB_PASSWORD', '新密码');
      define('DB_HOST', 'localhost'); // 有些主机是内网地址,按新主机给的填

    5. 千万不要直接在 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。

    6. 后台「设置 → 固定链接」点一下「保存更改」,WordPress 会重写 .htaccess。
      如果你用的是 Nginx,记得把伪静态规则配上(可从后台或 WP 官方文档复制 Nginx 规则)。

    7. 登录后台,确认地址是新域名。前台刷新,确认图片、CSS、JS 都加载正常。若启用了缓存插件/CDN,清一遍缓存。

    1. 旧站装插件 → Export → 下载 .wpress 文件。新站装同款 WP + 同款插件 → Import → 上传 .wpress。插件会自动解包文件、导入数据库、并自动替换域名(它内部就是按序列化安全的方式处理的)。导入完成后按提示重新登录(默认账号密码沿用旧站)。
      注意:免费版有单文件大小限制(~512MB 左右,随版本变化),超大站点需付费或拆分。

    2. 旧站装 Duplicator → 新建 Package → 生成「安装包 + installer.php」。把这两个文件传到新服务器根目录。浏览器访问 https://new.com/installer.php,按向导填新数据库信息,自动完成文件部署 + 数据库导入 + 域名替换。完成后删除 installer.php 和安装包(安全)。

    3. 对比项手动搬家插件搬家可控性高中上手难度需要命令行/数据库基础低序列化安全需自己用 WP-CLI插件已处理超大站点稳可能受体积限制推荐人群开发者 / 运维新手 / 求快

  3. 前台白屏 / 后台白屏:八成是 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 用户调整)。

  4. 旧站文件已完整备份(wp-content + 配置) 旧站数据库已导出 新服务器创建好数据库和用户 文件已上传到新服务器 wp-config.php 数据库连接已更新 域名已用序列化安全的方式替换(WP-CLI / 插件) 固定链接已重新保存 伪静态(.htaccess / Nginx)已配置 前台图片、样式、JS 加载正常 后台可正常登录且地址为新域名 缓存 / CDN 已刷新 旧服务器在确认无问题后再下线(建议保留 7 天)

  5. # 备份文件
    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)整理,转载请保留署名。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注