← 返回首页

WordPress命令行迁移实战:wp-cli与mysqldump完整指南

WordPress 建站指南数据库迁移wp-climysqldump建站教程

很多WordPress搬家教程会让你装一个迁移插件。装完之后,插件把你的整个站点打包成一个ZIP,上传到新主机,再解压——听起来简单,但实际操作中你会遇到文件大小限制、插件冲突、迁移后图片失联、域名替换不完整等问题。

我踩过这些坑。后来我改用命令行,30分钟完成了一个50GB站点的迁移,没有插件,没有超时,没有数据丢失。

这篇文章说透怎么做。

什么情况下命令行迁移比插件更好

插件迁移有三个常见问题:

文件大小限制。 All-in-One WP Migration免费版上限512MB,Duplicator免费版对包大小有限制。50GB的站点?插件根本跑不动。

超时和内存限制。 共享主机或低配VPS上,PHP执行时间和内存限制会卡死迁移进程。你调高了限制,插件跑起来了,但服务器可能直接503。

插件引入额外风险。 迁移插件在目标站写入数据,如果wp-config.php配置稍有不同,可能在导入时就失败。更别说有些主机把迁移插件列入了黑名单。

命令行迁移的优势:不受PHP配置限制,搬运的是原始文件,速度只取决于网络带宽,可以完全自动化,适合定期迁移场景。

迁移前准备:两台服务器都要确认

源站(老主机)需要:

目标站(新主机)需要:

确认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



📚 相关文章:

🔗 Related Tech Articles

Deep dive into related technical topics:

WordPress命令行迁移实战:wp-cli与mysqldump完整指南
技术标签: wordpress, 数据库迁移
WordPress CLI Migration: Complete Guide to wp-cli and mysqldump for Zero-Plugin Database Migration
技术标签: database migration, wp-cli
WordPress CLI Migration: Complete Guide to wp-cli and mysqldump for Zero-Plugin Database Migration
技术标签: database migration, wp-cli
🌐 WordPress Hosting
查看推荐 →