用 WP-CLI 的 wp search-replace 命令来做数据库替换,非常适合这种从 www.dian.com 切换到 wp.g9home.com 的场景。
wp cli 命令执行方式
方式 1:进入对应站点目录再执行
假设你有多个站点:
/var/www/site1
/var/www/site2
/var/www/site3
那么要替换 site2 的数据库:
cd /var/www/site2
wp search-replace 'http://www.dian.com' 'https://wp.g9home.com' --all-tables --skip-columns=guid --precise
方式 2:用 --path 参数指定路径
不切换目录,直接指定 WordPress 路径:
wp search-replace 'http://www.dian.com' 'https://wp.g9home.com' \
--path=/var/www/site2 \
--all-tables --skip-columns=guid --precise
方式 3:明确数据库参数(不常用)
如果你就是想在任意目录执行,也可以直接传 DB 参数:
wp search-replace 'http://www.dian.com' 'https://wp.g9home.com' \
--dbuser=root --dbpass=123456 --dbname=site2_db \
--all-tables --skip-columns=guid --precise
⚠️ 这种方式会跳过 wp-config.php,适合多站点混合时手动指定。
🔹 基本命令
wp search-replace 'http://www.dian.com' 'https://wp.g9home.com' --all-tables
🔹 常用参数说明
--all-tables
默认只会替换 WordPress core 表(以wp_开头),加上这个参数会替换数据库里所有表(包含插件自建表)。--precise
强制逐行替换,比较慢但更准确。--dry-run
预演模式,不会真正修改数据库,只显示会替换多少条数据。--skip-columns=guid
避免替换wp_posts.guid字段(官方建议,不然可能影响 feed)。
🔹 实际操作步骤
先 dry-run 看一下效果
wp search-replace 'http://www.dian.com' 'https://wp.g9home.com' --all-tables --dry-run
输出类似:
+-----------------------+-----------------------+--------------+------+
| Table | Column | Replacements | Type |
+-----------------------+-----------------------+--------------+------+
| wp_options | option_value | 2 | SQL |
| wp_posts | post_content | 15 | PHP |
| wp_postmeta | meta_value | 3 | PHP |
+-----------------------+-----------------------+--------------+------+
Success: 20 replacements to be made.
确认没问题后,正式替换
wp search-replace 'http://www.dian.com' 'https://wp.g9home.com' --all-tables --skip-columns=guid --precise
清理缓存
如果你有缓存插件或对象缓存(Redis/Memcached),执行:
wp cache flush
🔹 注意事项
- 确保你先备份数据库(
wp db export)。 - 如果原来用的是
https://www.dian.com,要保持协议一致,不然会漏替换。 - 替换后要重新登录后台,因为 cookies 域名变了。