资讯详情

WordPress网站迁移全流程:CPanel备份还原与数据库域名替换实操指南

📅 2026/10/13 1:09:25 | 华诺云谱 👁 阅读
WordPress网站迁移全流程:CPanel备份还原与数据库域名替换实操指南
1. 迁移思路拆解先把“搬家”这件事想清楚接到“环境迁徙”这个需求大多数站长的第一反应就是登录CPanel后台找到“备份”图标点一下“完整备份”下载一个压缩包然后到新主机上传就完事了。我劝你先别急。做过几次WordPress迁移之后你会发现“完整备份”这个名字有很强的误导性。CPanel的“完整备份”确实会把你的文件和数据库打成一个包但这恰恰是问题来源——这个包是针对同环境、同路径、同版本面板的“整体搬迁”设计的而绝大多数人的迁移场景根本不是这样。先拆解一下WordPress的本质。一个WordPress站点实际上就两样东西文件系统WordPress核心程序、主题、插件、上传的图片和附件所有代码都在这里。数据库文章内容、页面、用户、插件配置、菜单、主题设置所有“记忆”都在数据库里。换句话说文件决定了你的站点“长什么样”数据库决定了你的站点“知道什么”。环境迁徙就是同时把这两样东西搬过去并且确保它们在新环境里还能认出彼此。那怎么搬业界常见的做法有三种全站复制用CPanel的完整备份或主机商的迁移工具原样搬到新主机。适合同一家主机商内部换套餐、换机房因为环境几乎一致。文件数据库手动分离文件用FTP或文件管理器压缩下载数据库用phpMyAdmin导出到新环境再分别导入。适合跨主机商、换控制面板、甚至从虚拟主机迁到云服务器。利用WordPress迁移插件比如一些现成的迁移插件自动化程度高但需要消耗一定带宽和时间而且插件本身在不同环境下效果有差异。我个人的建议是不管哪种方式都先理解备份还原的原理而不是单纯依赖某个按钮。这篇文章就以CPanel为核心重点讲第二种方式因为它最通用、最可控也最容易排查问题。还有一个容易忽略的问题迁移之前先想清楚你是“同域名搬家”还是“换域名搬家”。同域名搬家简单文件搬过去、数据库导过去域名解析一改就完事。换域名搬家就麻烦一些数据库里所有旧域名的引用都要批量替换不然你打开新站点图片加载不出来、插件配置失效、跳转全乱套。这篇文章后面的章节会把这两种情况都覆盖到实操的时候对照着看就行。2. CPanel备份实操从一键备份到手动分离2.1 别小看“完整备份”按钮先给CPanel的“完整备份”正名。如果你的新主机和旧主机是同一家服务商甚至同一个面板版本直接用它是最省事的。路径通常是CPanel后台首页 → 文件分类下的“备份”图标 → “完整备份”选项卡。你只需要确认三件事备份类型选择“完整备份”而不是“部分备份”或“Home目录备份”。备份目的地默认是存到你的远程FTP服务器或主机的某个备份目录一般选“Home目录”就行它会生成一个类似backup-2025.3.25-xxxxxx.tar.gz的文件。点“生成备份”之后系统会进入一个后台任务可能要等几分钟甚至更久取决于你的站点大小。别关页面也别一直刷新不然容易中断任务。生成完成后你会在文件管理器的backup目录里看到这个压缩包。下载下来就完成备份了。但这里有个非常关键的问题这个完整备份包是CPanel“自定义格式”里面包含了你的所有账户下文件、数据库、邮件配置、DNS配置、FTP账户、定时任务等等。新主机上如果不是完全相同的面板和管理方式直接上传恢复经常会遇到奇奇怪怪的问题比如目录权限不对、数据库名不匹配、PHP版本太新导致程序报错等。所以“完整备份”的真正用途是在同一个CPanel环境下做保留性备份或者给服务商工单用。跨环境迁移的时候我更愿意手动分离文件数据库。而且分离还有一个额外的好处你顺带会理清自己的站点到底有哪些文件、哪些表平时懒得清理的垃圾文件和冗余数据这次正好清理一遍。2.2 手动分离文件备份的正确姿势文件备份的核心是拿干净完整的文件副本不要漏掉隐藏文件也不要残留旧的压缩包在站点目录里。我先说下准备步骤用CPanel的文件管理器进入public_html目录或者你网站的实际根目录有的站点绑定了子域名路径可能是public_html/子目录。先清理一些明显的垃圾旧备份包、升级遗留的*.bak文件、日志文件。别手滑删了wp-config.php那玩意儿删了你的站就废了。选中最顶层的目录和文件注意如果你用的是FTP别忘了查看隐藏文件.htaccess、.user.ini这些通常默认隐藏右键选择“压缩”格式选Zip或Tar.gz。有人会问为什么不直接压缩整个public_html里的所有内容当然可以但速度慢而且包里面会带上很多你其实不太需要的角落文件。更精细的做法是只拿网站运行真正需要的东西。WordPress站点的文件其实分三块WordPress核心文件根目录下那一大堆PHP文件、wp-admin、wp-includes目录这些是可替换的。有经验的站长甚至会重新下载一份WordPress安装包直接覆盖只保留后续要说的关键部分。主题和插件wp-content/themes/和wp-content/plugins/这两个目录是改动最多的地方垃圾也最多。上传文件wp-content/uploads/注意这里通常按月份分子目录只保留你需要的年份月份就行。但你如果嫌麻烦就整个压缩这种做法最安全、最不会漏。我自己的习惯是整个压缩但压缩前先清空wp-content/cache目录如果有缓存插件的话。缓存文件是临时产物搬过去之后总要重建的带过去只是徒增体积。注意如果你的站点开启了对象缓存、页面缓存这类功能备份前最好在WordPress后台把缓存清一次既能减小备份包体积也能避免迁移后出现奇怪的白屏或旧页面残留问题。压缩完成之后FTP或文件管理器把它下载到本地。然后做一个“完整性校验”的动作本地检查一下包的大小跟服务器上目录的总大小做个对比量级有时候压缩包大小突然跟你预期差很多八成是漏了什么目录。2.3 手动分离数据库备份的关键选项数据库是WordPress最脆弱的部分比文件更容易出问题。备份数据库核心是通过phpMyAdmin导出SQL文件。路径CPanel → 数据库分类 → phpMyAdmin图标 → 左边点击你的数据库名 → 顶部导航选“导出”。这里有几个选项需要特别注意。导出的格式“快速”和“自定义”两种方式。第一次做的话用“快速”就行它会自动选择所有表并导出一个完整SQL。但如果你想要更可控的备份选“自定义”在“格式”里选SQL在“对象”里选择“全部选中”。自定义的优势是可以把压缩方式选成“gzip”这样导出的是一个.sql.gz压缩包比纯SQL小得多导入时的成功率也更高。为什么我要强调压缩因为很多虚拟主机的phpMyAdmin有上传大小限制默认可能是50M或者100M。一个装了各种插件和几年文章的站点数据库很容易超过这个限制。如果你导出的SQL是压缩过的导入时phpMyAdmin会自动解压就能绕开一部分上传大小限制的问题。另外一个容易踩的坑是“导出期间禁用外键检查”这个选项在自定义导出的“格式”选项下面。如果你在旧的数据库表之间有关系比如某个插件创建了关联表导出时不勾选它导入回来可能因为表顺序问题报外键错误。我一般习惯勾上它反正导入的时候也不会有多大损失。导出完成后下载.sql.gz文件存好跟前面下载的文件压缩包放一起备份环节就完成了。3. 环境还原实操新主机的落地细节3.1 在新CPanel里把文件放回去新主机的环境里第一步是在CPanel里为WordPress准备好数据库然后才是文件落地。数据库准备分三步CPanel → 数据库分类 → MySQL数据库向导创建一个新数据库。注意数据库名的命名规则通常形如用户名_数据库名。在“MySQL用户”里创建一个新用户设一个高强度密码强度对人来说无所谓但对数据库来说很有必要。把这个用户添加到这个数据库并赋予“所有权限”。WordPress对数据库的权限需求基本是ALL PRIVILEGES不用抠细节。然后处理文件。如果你在旧主机上是整个压缩包下载的就把压缩包上传到public_html在文件管理器里解压。如果压缩包里的结构是public_html根目录下的文件们的顶层结构解压后文件会直接展开在根目录但如果压缩包里多了一层文件夹包装比如你压缩的是上层的public_html目录解压后会多出一个目录层这会导致WordPress找不到入口Unauthorized访问。检查办法很简单解压后看一眼public_html下有没有wp-login.php、wp-config.php这些关键文件。没有的话文件多了一层目录用文件管理器的“移动”功能把文件移出来或者干脆重新解压到正确位置。再往下就是关键的权限设置。CPanel的虚拟主机一般对文件权限有自己的一套管理方式不建议你手动去改一堆权限数值。我见过很多人迁移后问“为什么出现500错误”十有八九就是权限改乱了。正确的原则是文件权限644或主机商默认值目录权限755或主机商默认值wp-config.php444只读或按主机商建议设置在新环境里得益于CPanel你甚至不用太操心权限问题首要任务是把wp-config.php里的数据库连接信息改对。3.2 wp-config.php文件与数据库之间的桥梁WordPress为什么能找到你的数据库靠wp-config.php。这大概是整个还原流程里最容易出错的文件。用文件管理器编辑public_html/wp-config.php找到这几个常量define( DB_NAME, 旧数据库名 ); define( DB_USER, 旧数据库用户 ); define( DB_PASSWORD, 旧数据库密码 ); define( DB_HOST, localhost );把前三项改成你刚才在新CPanel里创建的数据库名、用户名、密码。DB_HOST一般保持localhost除非主机商特别说明。这里有个细节你可能没注意到如果你用的是CPanel的“完整备份”恢复备份包里记录的数据库名、用户名可能跟新环境不一致所以即使理论上“全自动”你还是得手动去改wp-config.php绕不开。这也印证了我前面的观点——手动分离反而更可控。改完之后建议先别急着访问网站先本地测试一下数据库连接是否正常。最简单的办法在浏览器里访问https://你的域名/wp-admin/如果数据库连接信息正确就会正常进入登录页如果出现“数据库连接出错”的提示多半是DB_NAME、DB_USER、DB_PASSWORD三项有误回头再检查一遍。3.3 数据库导入别在最后一步翻车接下来把之前导出的数据库SQL文件导回去。路径CPanel → phpMyAdmin → 选择你新建的那个数据库 → “导入”。导入时三个要点文件类型选SQL如果导出时用了gzip压缩上传.sql.gz也是可以的phpMyAdmin会自动识别并解压。导入前务必确认你选择的数据库是空的不要导入到一个有残留表结构的库里。CPanel里新建的数据库默认是空的不用额外处理。点“导入”按钮后如果文件比较大页面可能会长时间没有反应。别慌这是正常现象。你可以在服务器的“进程”管理页面观察MySQL查询是否还在跑。导入完成后怎么验证去phpMyAdmin左侧列表里看看表名是否齐全。以WordPress默认安装为例你应该能看到wp_options、wp_posts、wp_users、wp_comments、wp_term_taxonomy等标准表。如果用了某些插件还会有插件自己的表。表数量跟你导出时一致基本上就成功了。我还要提醒一件事如果你的新主机数据库字符集不是utf8mb4导入后可能出现中文乱码。这个问题在CPanel环境里通常不会发生因为默认就是utf8mb4但如果你用的是某些老版本MySQL的主机导入前在phpMyAdmin的“操作”选项里把数据库的排序规则改成utf8mb4_unicode_ci或utf8mb4_general_ci更稳妥。完成数据库导入、文件落到根目录、wp-config.php连接信息改好之后站点的核心迁移就算是完成了。打开网址你看到的应该是熟悉的站点。不过别高兴太早如果站点资源加载不出来、管理员登录不了、网站页面报错后面还有一系列收尾工作要做。4. 换域名迁移收尾必须处理的四个环节4.1 数据库里的域名替换别图省事直接改数据库如果你迁移的时候换了域名数据库内所有引用旧域名的内容都必须替换。问题的关键在于直接改SQL有风险。WordPress的数据结构中很多数据是用PHP序列化的方式存储的比如某个插件的配置项里存了一个数组a:2:{s:4:name;s:5:旧域名;s:7:website;s:11:https://旧域名;}这种序列化字符串里值的长度是写在字符串内容里的比如s:5:旧域名表示这个字符串长度为5。如果你简单粗暴地把“旧域名”替换成“新域名”字数长短不一样序列化数据就会解析失败轻则插件配置丢失重则整站白屏。最安全的办法是用WordPress官方的wp-cli命令或者在phpMyAdmin里只修改两个关键选项其他内容用脚本处理在phpMyAdmin里进入wp_options表找到siteurl和home这两行的option_value字段改为新域名。这两个值一个决定WordPress生成链接的基准地址一个决定后台和前台访问的地址都改成https://新域名就行。其他地方文章内容里写的旧域名链接、图片地址、导航菜单链接等用下面这个简单的PHP脚本处理它能正确处理序列化数据的长度问题。我提供一个屡试不爽的PHP替换脚本放在站点根目录运行后删掉?php // 把本文件放在 public_html 下访问一遍然后删除 $conn new mysqli(localhost, 数据库用户, 数据库密码, 数据库名); if ($conn-connect_error) { die(连接失败); } $old 旧域名; $new 新域名; $tables array(); $result $conn-query(SHOW TABLES); while ($row $result-fetch_row()) { $tables[] $row[0]; } foreach ($tables as $table) { $result $conn-query(SHOW COLUMNS FROM $table); $columns array(); while ($col $result-fetch_assoc()) { if (strpos($col[Type], char) ! false || strpos($col[Type], text) ! false) { $columns[] $col[Field]; } } if (empty($columns)) continue; foreach ($columns as $col) { $conn-query(UPDATE $table SET $col REPLACE($col, {$old}, {$new}) WHERE $col LIKE %{$old}%); } } echo 域名替换完成请立即删除此文件;这个脚本的思路是遍历所有表的所有字符串类型字段做一次文本替换。因为wp_options等表中存在序列化字符串单纯用SQLREPLACE会破坏序列化长度所以才需要谨慎处理——如果你批量替换的内容字数发生变化建议额外使用能修正序列化数据的专用迁移工具来彻底解决。对于大部分仅涉及站点链接的场景这个脚本配合手动检查就够用了。跑完之后验证一下到博客任意一篇文章页右键查看源代码搜索旧的域名应该一个都搜不到。这样才算替换干净。4.2 固定链接、伪静态、SSL和缓存域名替换完成只是第一步后续还有一堆“看起来不起眼但实际很麻烦”的操作。先处理固定链接。登录新站点后台进入“设置 → 固定链接”选中最常用的“文章名”格式或者你之前用的格式点“保存更改”。这个动作看似多余其实是在刷新伪静态规则。因为.htaccess文件里规则可能没跟过来或者新服务器对mod_rewrite的配置不同不刷新一下容易出现“文章404”这种问题。然后是SSL。如果你的新站点启用了HTTPS还需要检查几个地方WordPress后台“设置 → 常规”里的站点地址必须带https://前缀。wp-config.php里可以加上一行强制SSL$_SERVER[HTTPS] on;在“外观 → 主题编辑器”里的函数模板中偶尔会有写死http://的链接仔细排查一遍。用浏览器访问站点按F12打开开发者工具看“控制台”里的混合内容警告大多数问题一目了然。最后是缓存。如果你在旧站点上安装过缓存插件如WP Super Cache、W3 Total Cache等迁移回来后先到插件设置里“清除全部缓存”然后停用再重新启用一次。理由很简单缓存里存了旧服务器的绝对路径、旧域名的引用不清掉的话前台用户看到的就是一个半新半旧的站点后台改了设置也不生效。除此之外还需要在“设置 → 常规”里确认邮箱地址是新的在“用户 → 个人资料”里确认管理员邮箱因为有些主机商会对发信地址做限制邮箱不更新可能导致无法接收重设密码邮件。4.3 别忘了这三样邮件配置、定时任务、CDN很多人迁移完就以为大功告成直到用户反馈“怎么收不到注册邮件了”才来查问题。WordPress默认用PHP的mail()函数发信但迁移后的服务器未必启用了sendmail或postfix。这时候建议装一个SMPT插件来发信把你的企业邮箱或第三方邮件服务的SMTP信息填进去保证邮件发得出去。为了避免冲突先在插件里把旧站点的SMTP配置信息导出来新站恢复后手动填进去这样省得你在新站后台重新翻邮箱设置。另外如果你以前在旧服务器上挂了定时任务cron比如安全备份、SEO自动提交、文章定时发布等CPanel的“Cron Jobs”界面可能需要单独重新配置。WordPress本身有伪定时任务机制但也有些插件依赖真实cron迁移后务必检查一下“设置 → WP Cron”相关的配置项。CDN更不用说。如果你的站点用了CDN迁移后CDN里缓存的是旧服务器的资源地址。处理办法是先暂停CDN等域名解析和新站点完全生效后再重新配置源站地址并清空CDN缓存。说实话我见过太多人迁移后只盯着“网站能打开”结果邮件发不了、定时任务不跑、CDN缓存了旧图片这些问题往往是在上线几天后才逐一暴露的。搬完家按上面四个环节过一遍才叫真的搬完。5. 常见问题与排查技巧实录5.1 高频问题速查表我在自己操作和帮别人处理的过程中把常见的翻车现场整理成了一张表。迁移前先扫一眼真遇到了直接对号入座现象直接原因处理方式打开网站出现“数据库连接出错”wp-config.php里的DB_NAME、DB_USER、DB_PASSWORD不对或者数据库本身没导入成功依次检查数据库名、用户名、密码确认库里有没有表数据首页能开文章页全部404伪静态规则没生效mod_rewrite没开或者.htaccess丢失后台“设置 → 固定链接”里重新保存一次或手动创建包含标准Rewrite规则的.htaccess文件站点能开但图片全部裂开数据库里图片地址还是旧域名按第4章的方法把旧域名批量替换成新域名并清空缓存想登录后台提示“该站点正被设置维护中”根目录残留了.maintenance文件到文件管理器删除.maintenance文件即可打开网站白屏无任何提示PHP版本太低或太高插件兼容性问题或者内存限制太小先在CPanel里把PHP版本切换到兼容版本一般选择7.4或8.1然后逐个禁用插件排查导入SQL时提示“超出上传限制”主机限制了phpMyAdmin上传文件大小用gzip压缩的SQL导入或把SQL拆成两段分次导入或上传到服务器后用命令行导入5.2 我踩过的几个坑说几个实际踩过的坑这些往往不写进教程里。第一次做全站迁移的时候我用了CPanel的完整备份包下载下来7、8个G传到新主机后恢复结果后台能找到数据但首页直接500。查了半天发现是.htaccess文件没跟着恢复过来或者恢复过来后里面还写着旧环境的绝对路径。从那以后我就养成了“文件包和数据库分开打包”的习惯.htaccess单独检查一遍再传。还有一个坑是关于PHP版本的。旧主机用的PHP 7.2新主机默认PHP 8.2结果迁移后页面能用但某些老插件直接白屏。新主机的PHP版本切换工具通常都有切到兼容版本就行。别嫌版本老稳定运行比时髦更重要。当然有条件的话把老插件逐一替换成支持新版本PHP的替代品才是长远之计。再有就是数据库导入超时的问题。有一次导一个近200M的SQL文件phpMyAdmin页面转了十几分钟最后显示超时登录后台提示“表不存在”。当时慌了一下后来学乖了如果数据库很大直接在主机命令行用mysql命令导入就不受PHP超时限制mysql -u用户名 -p密码 数据库名 /home/用户名/backup.sql虚拟主机不一定给你SSH权限但有些支持在“Cron Jobs”里添加一条临时命令来执行导入也是个办法。实在不行用gzip压缩的SQL文件导入成功率会高出不少。5.3 迁移完成后的自检清单在我的经验里做完一次迁移只用眼睛看一遍首页是不够的。完整的自检至少包含以下项目打开首页确认无报错、无样式错乱。随机点开几篇文章、几个分类页、一个搜索页确认伪静态和分页正常。登录后台确认所有插件都已正常启用且无红色错误提示。在后台“设置 → 常规”里确认两个地址都是新域名或正确域名。查看wp-content/uploads里的图片能否正常加载排除文件权限或路径问题。用网站测速工具跑一遍确认没有因缓存插件配置错误导致加载异常。给维护邮箱发一封测试邮件确认邮件功能正常。检查Cron Jobs是否有旧任务残留按实际情况重设一遍。这一套做完你才能放心地把域名解析切过来。很多人喜欢先把域名解析到新服务器再慢慢优化实际上我建议先在服务器上配置好临时域名或Hosts绑定来测试确认无误后再切换DNS这样能最大程度避免用户看到半成品。环境迁徙本质上是一个“可重复性验证”的过程。只要你把备份、还原、替换、验证这四个环节吃透了不管是从CPanel到CPanel还是从虚拟主机到云服务器甚至是以后用到其他面板、其他环境思路都是一通百通的。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑