很多WordPress搬家教程会让你装一个迁移插件。装完之后,插件把你的整个站点打包成一个ZIP,上传到新主机,再解压——听起来简单,但实际操作中你会遇到文件大小限制、插件冲突、迁移后图片失联、域名替换不完整等问题。
我踩过这些坑。后来我改用命令行,30分钟完成了一个50GB站点的迁移,没有插件,没有超时,没有数据丢失。
这篇文章说透怎么做。
什么情况下命令行迁移比插件更好
插件迁移有三个常见问题:
文件大小限制。 All-in-One WP Migration免费版上限512MB,Duplicator免费版对包大小有限制。50GB的站点?插件根本跑不动。
超时和内存限制。 共享主机或低配VPS上,PHP执行时间和内存限制会卡死迁移进程。你调高了限制,插件跑起来了,但服务器可能直接503。
插件引入额外风险。 迁移插件在目标站写入数据,如果wp-config.php配置稍有不同,可能在导入时就失败。更别说有些主机把迁移插件列入了黑名单。
命令行迁移的优势:不受PHP配置限制,搬运的是原始文件,速度只取决于网络带宽,可以完全自动化,适合定期迁移场景。
迁移前准备:两台服务器都要确认
源站(老主机)需要:
- SSH访问权限
- mysqldump命令(通常预装)
- wp-cli已安装(`wp --info`验证)
目标站(新主机)需要:
- SSH访问权限
- MySQL/MariaDB已安装并运行
- Nginx/Apache已配置
- PHP已安装且版本与源站一致
- wp-cli已安装
确认wp-cli安装(两台服务器都要):
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar && chmod +x phar && mv phar /usr/local/bin/wp
wp --info
输出包含WP-CLI v2.x.x即为成功。
步骤一:打包下载源站文件
在源站服务器执行,不要通过FTP下载整个wp-content,那会丢失文件权限。
# 在源站wp目录执行
cd /var/www/your-site.com/public_html
tar -czvf ~/site-backup.tar.gz . --exclude='./wp-content/cache' --exclude='./wp-content/upgrade'
--exclude参数排除了缓存和升级临时文件,能让压缩包缩小30%-50%。
然后下载到本地(或直接rsync到新服务器):
scp user@old-server:~/site-backup.tar.gz ./
步骤二:导出数据库(最重要的一步)
# 查看当前数据库配置
wp config get DB_NAME DB_USER DB_PASSWORD DB_HOST --path=/var/www/your-site.com/public_html
# 导出数据库
mysqldump -u DB_USER -p DB_NAME | gzip > ~/database-backup.sql.gz
必须验证导出完整性:
zcat ~/database-backup.sql.gz | grep -c "CREATE TABLE"
# 返回表数量,应该在12-80之间(取决于插件数量)
# WordPress核心有12张表,插件会额外创建
如果返回数字很小或为空,说明导出失败,不要继续。
步骤三:上传文件到新服务器
如果两台服务器能直接互通,用rsync跳过本地中转,速度快且不断开续传:
rsync -avz -e ssh --progress ~/site-backup.tar.gz user@new-server:~/
如果需要经过本地中转,tar包+scp足够。
步骤四:在新服务器解压并配置
# 解压到网站目录
mkdir -p /var/www/your-site.com
tar -xzvf ~/site-backup.tar.gz -C /var/www/your-site.com/public_html --strip-components=1
chown -R www-data:www-data /var/www/your-site.com/public_html
步骤五:修改wp-config.php(或用wp-cli配置)
在新服务器上创建数据库并授权:
mysql -u root -p
CREATE DATABASE new_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON new_db.* TO 'new_db_user'@'localhost' IDENTIFIED BY 'strong_password';
FLUSH PRIVILEGES;
EXIT;
然后修改wp-config.php中的数据库连接信息:
wp config set DB_NAME new_db
wp config set DB_USER new_db_user
wp config set DB_PASSWORD strong_password
wp config set DB_HOST localhost
步骤六:替换域名(如果换了域名)
这是最关键的一步。WordPress把域名存在数据库的序列化数据中,直接SQL全局替换会破坏序列化结构,导致插件设置丢失。
必须用wp-cli的search-replace:
# 确认替换前先预览(不实际执行)
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --dry-run
# 确认无误后执行
wp search-replace 'https://old-domain.com' 'https://new-domain.com' --precise
--precise参数告诉wp-cli使用PHP的unserialize而非正则匹配,确保序列化数据不被破坏。
常见问题:如果迁移后只换了主机但域名不变,这步可以跳过。
步骤七:导入数据库
zcat ~/database-backup.sql.gz | mysql -u new_db_user -p new_db
验证导入成功:
wp db query "SELECT COUNT(*) FROM wp_posts;" --path=/var/www/your-site.com/public_html
步骤八:清理缓存并验证
# 删除wp-content/cache目录
rm -rf /var/www/your-site.com/public_html/wp-content/cache/*
# 验证wp-cli能读取数据库
wp --path=/var/www/your-site.com/public_html core verify-checksums
# 验证媒体文件URL
wp media regenerate --only_missing --path=/var/www/your-site.com/public_html
三种方式对比
| 方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| 插件迁移 | 小站点(<500MB)、新手 | 图形界面,简单 | 文件大小限制,插件冲突风险 |
| 命令行迁移 | 中大型站点、有技术基础 | 速度快,不限大小,无插件依赖 | 需要SSH和基础Linux操作 |
| 主机商迁移 | 所有站点 | 免费,专业团队操作 | 需要主机商支持,时间不可控 |
我推荐:500MB以下且域名不变用Duplicator;500MB以上或换域名用命令行;完全不想动手就找主机商免费迁移。
迁移后常见问题排查
问题一:页面空白或500错误
检查PHP版本:php -v,确保与源站一致。WordPress 6.x需要PHP 7.4以上。
# 查看PHP版本要求
wp core verify-checksums --path=/var/www/your-site.com/public_html
问题二:图片404
媒体文件URL存在于wp_posts的post_content中,用search-replace替换了就不应该出现。如果还有问题,检查wp_options里的upload_path:
wp option get upload_path --path=/var/www/your-site.com/public_html
wp option update upload_path '/wp-content/uploads'
问题三:重定向次数过多
通常是wp-config.php里SITEURL和HOMEURL与实际域名不匹配。立即修复:
wp option update home 'https://new-domain.com'
wp option update siteurl 'https://new-domain.com'
问题四:数据库导入报错
可能是字符集问题。加参数重试:
zcat ~/database-backup.sql.gz | mysql -u new_db_user -p new_db --default-character-set=utf8mb4
30分钟完成的本质
整个流程的核心不是某个命令,而是剥离了插件这个中间层。插件做的事,无非是把tar、mysqldump、SCP、search-replace这些命令行工具打包成图形界面。明白了这一点,你就知道为什么命令行更快、更稳、更可控。
如果你经常在不同主机间迁移WordPress,建议把以上步骤写成shell脚本,第一次花10分钟写好,以后每次迁移只需运行一个脚本。
👉 想要更简单的方式?MiniMax API可以帮你自动化内容更新流程,站点迁移后批量替换内容URL不需要手动一条条改,AI驱动的工作流让整个过程更高效。
👉 立即参与:https://platform.minimaxi.com/subscribe/token-plan?code=E5yur9NOub&source=link
📚 相关文章:
- WordPress子主题创建完整指南 — 原理、创建步骤与实战避坑
- 2026年最新WordPress建站完整指南 — 从零开始打造专业网站
🔗 Related Tech Articles
Deep dive into related technical topics: